from datetime import datetime, timezone
from skyfield.api import load, wgs84

ts = load.timescale()
eph = load("de421.bsp")
earth = eph["earth"]


def is_planet_overhead(
        planet_name: str,
        utc_datetime: datetime,
        latitude_deg: float,
        longitude_deg: float,
) -> bool:
    if utc_datetime.tzinfo is None:
        raise ValueError("utc_datetime must be timezone-aware UTC")
    planet = eph[planet_name.lower()]
    observer = wgs84.latlon(latitude_deg, longitude_deg)
    t = ts.from_datetime(utc_datetime)
    astrometric = (earth + observer).at(t).observe(planet)
    apparent = astrometric.apparent()
    alt, az, distance = apparent.altaz()
    # above horizon
    # print(f"{planet_name} is {alt.degrees} over horizon")
    return alt.degrees > 0.0
