#! /usr/bin/python3
import datetime
import math

def generate_dut1_prediction_2027():
    # --- 1. STARTWERTE (IM SOMMER 2026 AUS DEM IERS BULLETIN A ABZULESEN) ---
    dut1_anchor = 0.01061
    anchor_date = datetime.date(2026, 8, 6)
    
    # Linearer Trend (Verlust/Gewinn pro Tag in Sekunden)
    daily_drift = -0.000213 

    # Saisonaler Koeffizient (Amplituden in Sekunden, typische IERS-Näherungswerte)
    A1, phi1 = 0.022, 1.85
    A2, phi2 = 0.012, 0.95

    # --- 2. GENERIERUNG FÜR 2027 ---
    start_date = datetime.date(2027, 1, 1)
    end_date = datetime.date(2027, 12, 31)
    
    current_date = start_date
    
    # Spaltendefinition angepasst: 3 Blöcke (lc) getrennt durch zwei Leerspalten (c) -> 7 Spalten insgesamt
    latex_table = r"""\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{booktabs}
\usepackage{longtable}

\begin{document}
\section*{IERS Vorhersagetabelle: $DUT1$ Korrektur für das Jahr 2027}
\begin{small}
Verwendung: $UT1 = UTC + DUT1$. Dieser synthetische Datensatz wurde im Sommer 2026 
auf Basis des IERS-LOD-Trends und der saisonalen atmosphärischen Terme modelliert.
\end{small}

\vspace{0.5cm}

\begin{longtable}{lc c lc c lc}
\caption{Synthetische $DUT1$ Vorhersage (stichprobenartig alle 5 Tage)}\\
\toprule
\textbf{Datum} & \textbf{$DUT1$ (Sek.)} & & \textbf{Datum} & \textbf{$DUT1$ (Sek.)} & & \textbf{Datum} & \textbf{$DUT1$ (Sek.)} \\
\midrule
\endfirsthead
\toprule
\textbf{Datum} & \textbf{$DUT1$ (Sek.)} & & \textbf{Datum} & \textbf{$DUT1$ (Sek.)} & & \textbf{Datum} & \textbf{$DUT1$ (Sek.)} \\
\midrule
\endhead
"""

    rows = []
    while current_date <= end_date:
        days_since_anchor = (current_date - anchor_date).days
        day_of_year = current_date.timetuple().tm_yday
        omega = 2 * math.pi / 365.25
        
        linear_term = dut1_anchor + (daily_drift * days_since_anchor)
        seasonal_term = (A1 * math.sin(omega * day_of_year + phi1) + 
                         A2 * math.sin(2 * omega * day_of_year + phi2))
        
        predicted_dut1 = linear_term + seasonal_term
        rows.append((current_date.strftime("%Y-%m-%d"), f"{predicted_dut1:+.4f}"))
        current_date += datetime.timedelta(days=5)
    
    # Zeilen sauber für die 7 Spalten aufbauen
    for i in range(0, len(rows), 3):
        # Block 1
        b1 = f"{rows[i][0]} & {rows[i][1]}" if i < len(rows) else "&"
        # Block 2
        b2 = f"{rows[i+1][0]} & {rows[i+1][1]}" if i + 1 < len(rows) else "&"
        # Block 3
        b3 = f"{rows[i+2][0]} & {rows[i+2][1]}" if i + 2 < len(rows) else "&"
        
        # Zusammensetzen mit den leeren Spaltentrennern
        latex_table += f"{b1} & & {b2} & & {b3} \\\\\n"

    latex_table += r"""\bottomrule
\end{longtable}
\end{document}
"""
    
    with open("DUT1_Prediction_2027.tex", "w", encoding="utf-8") as f:
        f.write(latex_table)
    print("LaTeX-Tabelle 'DUT1_Prediction_2027.tex' erfolgreich generiert.")

if __name__ == "__main__":
    generate_dut1_prediction_2027()
