import json
import requests
import os

API_URL = "https://mtr.ciapongi.szablix.pl/mtr/api/map/stations-and-routes?dimension=0"
OUTPUT_FILE = "/var/lib/pterodactyl/volumes/cc7ccc03-03bd-4bde-8488-3057d3803420/squaremap/web/stations.json"

def main():
    print("--- Start: Pobieranie, Centrowanie i Kolorowanie ---")
    try:
        response = requests.get(API_URL, timeout=15)
        response.raise_for_status()
        raw_json = response.json()
        if 'data' not in raw_json: return
        source_data = raw_json['data']
        
        station_info = {}
        station_points = {}
        if 'stations' in source_data:
            for s in source_data['stations']:
                sid = s.get('id')
                station_info[sid] = {
                    "id": sid, "name": s.get('name', 'Bez nazwy'),
                    "color": "#{:06x}".format(s.get('color', 16711680)), "lines": {} 
                }
                station_points[sid] = []

        if 'routes' in source_data:
            for r in source_data['routes']:
                r_id = r.get('id')
                r_name = r.get('name', 'Trasa')
                r_number = r.get('number', '')
                if not r_number or r_number.strip() == "": r_number = r_name.split("||")[0]
                r_color = "#{:06x}".format(r.get('color', 0))
                
                for st_entry in r.get('stations', []):
                    sid = st_entry.get('id')
                    sx = st_entry.get('x')
                    sz = st_entry.get('z')
                    if sid in station_info and sx is not None:
                        station_points[sid].append([sx, sz])
                        station_info[sid]['lines'][r_id] = {
                            "id": r_id, "name": r_name, "number": r_number, "color": r_color
                        }

        station_centroids = {}
        for sid, points in station_points.items():
            if not points: continue
            avg_x = sum(p[0] for p in points) / len(points)
            avg_z = sum(p[1] for p in points) / len(points)
            station_centroids[sid] = [avg_x, avg_z]

        final_routes = []
        if 'routes' in source_data:
            for r in source_data['routes']:
                path_coords = []
                r_id = r.get('id')
                r_name = r.get('name', '')
                r_number = r.get('number', '')
                if not r_number or r_number.strip() == "": r_number = r_name.split("||")[0]
                r_color = "#{:06x}".format(r.get('color', 0))
                
                r_stations = []
                r_dest = "Kierunek nieznany"
                st_list = r.get('stations', [])
                r_durations = r.get('durations', []) 
                
                if st_list:
                    last_st_id = st_list[-1].get('id')
                    if last_st_id in station_info: r_dest = station_info[last_st_id]['name']
                
                for st_entry in st_list:
                    sid = st_entry.get('id')
                    if sid:
                        # KRYTYCZNE: Wyciągamy też DWELL TIME (czas postoju w milisekundach)
                        r_stations.append({
                            "id": sid, 
                            "platform": st_entry.get('name', '1'), 
                            "dwellTime": st_entry.get('dwellTime', 10000)
                        }) 
                    
                    if sid in station_centroids: path_coords.append(station_centroids[sid])
                    elif st_entry.get('x') is not None: path_coords.append([st_entry.get('x'), st_entry.get('z')])
                
                if len(path_coords) > 1:
                    final_routes.append({
                        "id": r_id, "name": r_name, "number": r_number, "destination": r_dest,
                        "color": r_color, "path": path_coords, "stations": r_stations, "durations": r_durations
                    })

        final_stations = []
        for sid, center in station_centroids.items():
            info = station_info[sid]
            lines_list = list(info['lines'].values())
            lines_list.sort(key=lambda x: x['name'])
            final_stations.append({
                "id": info['id'], "name": info['name'], "color": info['color'], "coords": center, "lines": lines_list
            })

        output = {"stations": final_stations, "routes": final_routes}
        with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
            json.dump(output, f, ensure_ascii=False)
        print(f"SUKCES! Stacji: {len(final_stations)}")
    except Exception as e: print(f"BŁĄD: {e}")

if __name__ == "__main__": main()
