import threading
import time
import sys
from http.server import HTTPServer
import socketserver
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

from proxy_server import CORSRequestHandler, PORT
import update_map
import generate_map_v7

UPDATE_INTERVAL = 60

def update_map_pipeline():
    while True:
        try:
            print("\n" + "="*40)
            print(f"[*] Rozpoczynam lekki cykl aktualizacji mapy (MAGIC MTR API)...")
            
            # Krok 1: Pobranie i wycentrowanie stacji
            update_map.main()
            
            # Krok 2: Pobranie szyn na żywo i trasowanie
            generate_map_v7.main()
            
            print(f"[*] Cykl zakończony. Następny za {UPDATE_INTERVAL}s.")
            print("="*40 + "\n")
        except Exception as e:
            print(f"[!!!] Błąd w potoku: {e}")
        
        time.sleep(UPDATE_INTERVAL)

def start_daemon():
    updater_thread = threading.Thread(target=update_map_pipeline, daemon=True)
    updater_thread.start()
    print("[*] Wątek aktualizatora wystartował.")

    socketserver.TCPServer.allow_reuse_address = True
    httpd = HTTPServer(('0.0.0.0', PORT), CORSRequestHandler)
    print(f"[*] Serwer Proxy startuje na porcie {PORT}...")
    
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        print("\n[*] Zamykanie...")
        httpd.server_close()
        sys.exit(0)

if __name__ == "__main__":
    start_daemon()
