import os, datetime
import customtkinter as ctk
from skyfield.api import Loader, wgs84
from skyfield import almanac

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

class Menu7App(ctk.CTk):
    def __init__(self):
        super().__init__()
        self.title("Moon Times (Modul 7)")
        self.geometry("800x600")
        ctk.set_appearance_mode("Dark")
        
        # --- PERBAIKAN SKYFIELD LOADER DI SINI ---
        self.load_obj = Loader(BASE_DIR)
        self.eph = self.load_obj('de421.bsp')
        self.ts = self.load_obj.timescale()
        # -----------------------------------------
        
        self.setup_ui()

    def setup_ui(self):
        self.sidebar = ctk.CTkFrame(self, width=200)
        self.sidebar.pack(side="left", fill="y", padx=10, pady=10)
        
        now = datetime.datetime.now()
        
        self.entry_m = ctk.CTkEntry(self.sidebar)
        self.entry_m.insert(0, str(now.month))
        self.entry_m.pack(pady=5)
        
        self.entry_y = ctk.CTkEntry(self.sidebar)
        self.entry_y.insert(0, str(now.year))
        self.entry_y.pack(pady=5)
        
        self.entry_lat = ctk.CTkEntry(self.sidebar)
        self.entry_lat.insert(0, "-7.0667")
        self.entry_lat.pack(pady=5)
        
        self.entry_lon = ctk.CTkEntry(self.sidebar)
        self.entry_lon.insert(0, "110.4100")
        self.entry_lon.pack(pady=5)
        
        ctk.CTkButton(self.sidebar, text="▶ HITUNG", command=self.hitung).pack(pady=10)
        
        self.textbox = ctk.CTkTextbox(self, font=("Consolas", 14))
        self.textbox.pack(side="right", fill="both", expand=True, padx=10, pady=10)

    def hitung(self):
        self.textbox.delete("1.0", "end")
        try:
            m = int(self.entry_m.get())
            y = int(self.entry_y.get())
            lat = float(self.entry_lat.get())
            lon = float(self.entry_lon.get())
        except ValueError:
            self.textbox.insert("end", "Pastikan input angka valid.")
            return
            
        tz = 7.0
        loc = wgs84.latlon(lat, lon)
        t0 = self.ts.utc(y, m, 1, -int(tz))
        
        import calendar
        t1 = self.ts.utc(y, m, calendar.monthrange(y, m)[1], 24-int(tz))
        
        f_rs = almanac.risings_and_settings(self.eph, self.eph['moon'], loc)
        t_rs, y_rs = almanac.find_discrete(t0, t1, f_rs)
        
        self.textbox.insert("end", f"JADWAL BULAN - {m}/{y}\n{'='*50}\n")
        self.textbox.insert("end", f"{'Tanggal':<15}{'Moonrise':<15}{'Moonset':<15}\n{'-'*50}\n")
        
        data = {}
        for t, is_rise in zip(t_rs, y_rs):
            dt = t.utc_datetime() + datetime.timedelta(hours=tz)
            k = dt.day
            if k not in data:
                data[k] = {'r':'----', 's':'----'}
            if is_rise:
                data[k]['r'] = dt.strftime("%H:%M")
            else:
                data[k]['s'] = dt.strftime("%H:%M")
            
        for d in range(1, calendar.monthrange(y, m)[1]+1):
            r = data.get(d, {}).get('r', '----')
            s = data.get(d, {}).get('s', '----')
            self.textbox.insert("end", f"{d:02d}/{m:02d}/{y:<9}  {r:<14} {s:<14}\n")

if __name__ == "__main__":
    app = Menu7App()
    app.mainloop()