python
import datetime
import time
import numpy as np
from skyfield.api import load, Topos
from skyfield.framelib import ecliptic_frame

def calculate_maya_calendar():
    """Calculates Maya tracking systems using the standard 584283 GMT correlation."""
    now = datetime.datetime.now(datetime.timezone.utc)
    y, m, d = now.year, now.month, now.day
    if m <= 2:
        y -= 1
        m += 12
    A = y // 100
    B = A // 4
    C = 2 - A + B
    E = int(365.25 * (y + 4716))
    F = int(30.6001 * (m + 1))
    jdn = int(C + d + E + F - 1524.5 + 0.5)
    
    days = jdn - 584283
    
    baktun = days // 144000
    rem = days % 144000
    katun = rem // 7200
    rem = rem % 7200
    tun = rem // 360
    rem = rem % 360
    uinal = rem // 20
    kin = rem % 20
    long_count = f"{baktun}.{katun}.{tun}.{uinal}.{kin}"
    
    tz_num = (days + 3) % 13 + 1
    tz_names = ["Imix", "Ik'", "Ak'b'al", "K'an", "Chikchan", "Kimi", "Manik'", "Lamat", "Muluk", "Ok", 
                "Chuwen", "Eb'", "Ben", "Hix", "Men", "Kib'", "Kab'an", "Etz'nab'", "Kawak", "Ajaw"]
    tz_date = f"{tz_num} {tz_names[(days + 19) % 20]}"
    
    haab_names = ["Pop", "Wo'", "Sip", "Sotz'", "Sek", "Xul", "Yaxk'in", "Mol", "Ch'en", "Yax", 
                  "Sak'", "Keh", "Mak", "K'ank'in", "Muwan", "Pax", "K'ayab'", "Kumk'u", "Wayeb'"]
    haab_days = (days + 348) % 365
    haab_month_idx = haab_days // 20
    haab_day_num = haab_days % 20
    if haab_month_idx >= 18:
        haab_month_idx = 18
        haab_day_num = haab_days - 360
    haab_date = f"{haab_day_num} {haab_names[haab_month_idx]}"
    
    day_in_819 = days % 819
    quadrants = ["East (Red)", "North (White)", "West (Black)", "South (Yellow)"]
    quadrant = quadrants[(days // 819) % 4]
    
    return long_count, tz_date, haab_date, day_in_819, quadrant

def print_live_dashboard():
    planets_ephemeris = load('de421.bsp')
    ts = load.timescale()
    
    earth = planets_ephemeris['earth']
    moon_body = planets_ephemeris['moon']
    sun_body = planets_ephemeris['sun']
    
    visible_planets = {
        'Mercury': planets_ephemeris['mercury'],
        'Venus': planets_ephemeris['venus'],
        'Mars': planets_ephemeris['mars_barycenter'],
        'Jupiter': planets_ephemeris['jupiter_barycenter'],
        'Saturn': planets_ephemeris['saturn_barycenter']
    }
    
    # Bordentown, NJ coordinates
    bordentown = earth + Topos(latitude_degrees=40.1473, longitude_degrees=-74.7088)
    t = ts.now()
    
    print("=" * 66)
    print("      LIVE PLANETARY, MOON & MAYA MASTER TIME ENGINE")
    print("=" * 66)
    
    # Display Maya Data
    lc, tz, hb, day_819, quad = calculate_maya_calendar()
    print(f" Maya Long Count: {lc}")
    print(f" Tzolk'in Date:   {tz}")
    print(f" Haab' Date:      {hb}")
    print(f" 819-Day Station: Day {day_819} of cycle | Direction: {quad}")
    print("-" * 66)
    
    # Calculate Moon Phase Illumination
    ecliptic_earth = earth.at(t)
    sun_pos = ecliptic_earth.observe(sun_body).apparent().frame_latlon(ecliptic_frame)
    moon_pos = ecliptic_earth.observe(moon_body).apparent().frame_latlon(ecliptic_frame)
    elongation = moon_pos[1].degrees - sun_pos[1].degrees
    illumination = (1.0 + np.cos(np.radians(elongation))) / 2.0 * 100
    
    # Calculate Moon Position
    moon_astrometric = bordentown.at(t).observe(moon_body)
    moon_alt, moon_az, _ = moon_astrometric.apparent().altaz()
    moon_ra, moon_dec, _ = moon_astrometric.radec()
    
    # Display Moon Metrics
    print(f" Moon Phase:      {illumination:.1f}% Illuminated")
    # If altitude is below 0, it means the Moon has set below the horizon
    horizon_status = f"{moon_alt.degrees:.1f}°" if moon_alt.degrees > 0 else f"{moon_alt.degrees:.1f}° (Below Horizon)"
    print(f" Moon Altitude:   {horizon_status}")
    print(f" Moon Coordinates: R.A. {str(moon_ra)[:11]} | Dec {str(moon_dec)[:11]}")
    print("-" * 66)
    
    # Display Planet Coordinates
    print(f"{'Planet':<12} | {'Right Ascension (R.A.)':<22} | {'Declination (Dec)':<15}")
    print("-" * 66)
    for name, target in visible_planets.items():
        astrometric = bordentown.at(t).observe(target)
        ra, dec, _ = astrometric.radec()
        print(f"{name:<12} | {str(ra):<22} | {str(dec):<15}")
    print("=" * 66)

if __name__ == "__main__":
    try:
        while True:
            print("\n" * 20) 
            print_live_dashboard()
            print("Press Ctrl+C to exit. Updating every 2 seconds...")
            time.sleep(2)
    except KeyboardInterrupt:
        print("\nEngine stopped.")
