#!/Users/rxf/Projekte/wetterstation/.venv/bin/python
"""
Generiert statische HTML-Dateien mit aktuellen Wetterdaten und lädt sie auf den Server hoch
"""
import json
import os
import shutil
import subprocess
import sys
from pathlib import Path
import requests
from datetime import datetime

# Konfiguration
API_URL = "http://localhost:8000"
FRONTEND_DIR = Path(__file__).parent / "frontend"
DIST_DIR = FRONTEND_DIR / "dist"
REMOTE_SERVER = "ssh-310927-rxf@sternwarte-welzheim.de"  # SSH-Zugang zum Webserver
REMOTE_PATH = "webroot/wetter/wetterstation"  # Pfad auf dem Webserver

def fetch_weather_data():
    """Holt aktuelle Wetterdaten von der API"""
    try:
        response = requests.get(f"{API_URL}/weather/history?hours=24", timeout=10)
        response.raise_for_status()
        return response.json()
    except Exception as e:
        print(f"Fehler beim Laden der Daten: {e}")
        sys.exit(1)

def build_frontend():
    """Baut das Frontend"""
    print("Baue Frontend...")
    try:
        subprocess.run(
            ["npm", "run", "build"],
            cwd=FRONTEND_DIR,
            check=True,
            capture_output=True
        )
        print("✓ Frontend gebaut")
    except subprocess.CalledProcessError as e:
        print(f"Fehler beim Build: {e.stderr.decode()}")
        sys.exit(1)

def inject_data_into_html(weather_data):
    """Fügt Wetterdaten in die index.html ein"""
    index_file = DIST_DIR / "index.html"
    
    if not index_file.exists():
        print("index.html nicht gefunden!")
        sys.exit(1)
    
    with open(index_file, 'r', encoding='utf-8') as f:
        html_content = f.read()
    
    # Füge Daten als inline Script vor dem schließenden </body> Tag ein
    data_script = f"""
    <script>
      // Eingebettete Wetterdaten - generiert am {datetime.now().isoformat()}
      window.__WEATHER_DATA__ = {json.dumps(weather_data)};
    </script>
  </body>"""
    
    html_content = html_content.replace('</body>', data_script)
    
    with open(index_file, 'w', encoding='utf-8') as f:
        f.write(html_content)
    
    print(f"✓ Daten in HTML eingebettet ({len(weather_data)} Datensätze)")

def upload_to_server():
    """Lädt die Dateien per rsync auf den Server"""
    print(f"Lade Dateien auf {REMOTE_SERVER}...")
    
    try:
        subprocess.run([
            "rsync",
            "-avz",
            "--delete",
            f"{DIST_DIR}/",
            f"{REMOTE_SERVER}:{REMOTE_PATH}/"
        ], check=True)
        print(f"✓ Upload erfolgreich")
    except subprocess.CalledProcessError as e:
        print(f"Fehler beim Upload: {e}")
        sys.exit(1)

def main():
    print(f"=== Wetterstation Static Generator ===")
    print(f"Start: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
    
    # 1. Daten von API holen
    print("Lade Wetterdaten...")
    weather_data = fetch_weather_data()
    print(f"✓ {len(weather_data)} Datensätze geladen\n")
    
    # 2. Frontend bauen
    build_frontend()
    print()
    
    # 3. Daten in HTML einbetten
    inject_data_into_html(weather_data)
    print()
    
    # 4. Auf Server hochladen
    upload_to_server()
    
    print(f"\n✓ Fertig: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

if __name__ == "__main__":
    main()
