#!/usr/bin/env python3
"""FAK API per SuperLuca — serve dati FAK in JSON via HTTP sulla porta 8081."""
import json, os, http.server

HOME = os.path.expanduser('~/.hermes')
FAK_FILE = os.path.join(HOME, 'fak-comparison', 'comparison_data.json')

class FAKHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        path = self.path.rstrip('/')
        if path == '/fak' or path == '/fak/':
            self._serve_json(self._load_all())
        elif path.startswith('/fak/search?'):
            q = self._param('q', '').upper().strip()
            self._serve_json(self._search(q))
        elif path.startswith('/fak/carrier/'):
            carrier = path.split('/')[-1].lower()
            self._serve_json(self._by_carrier(carrier))
        else:
            self._serve_json({"error": "endpoint sconosciuto", "endpoints": ["/fak", "/fak/search?q=SHANGHAI", "/fak/carrier/evergreen"]})
    
    def _param(self, name, default=''):
        from urllib.parse import urlparse, parse_qs
        qs = parse_qs(urlparse(self.path).query)
        return qs.get(name, [default])[0]
    
    def _load_all(self):
        try:
            with open(FAK_FILE) as f:
                return json.load(f)
        except: return {"status": "error"}
    
    def _by_carrier(self, name):
        data = self._load_all()
        rates = data.get('rates', {})
        if name not in rates:
            return {"error": f"Carrier '{name}' non trovato", "available": list(rates.keys())}
        return {name: rates[name]}
    
    def _search(self, q):
        data = self._load_all()
        if not q:
            return {"error": "Parametro 'q' richiesto"}
        results = {}
        for carrier, rates in data.get('rates', {}).items():
            if isinstance(rates, dict):
                matches = {k: v for k, v in rates.items() if q in k.upper() or q in v.get('pol','').upper() or q in v.get('pod','').upper()}
                if matches: results[carrier] = matches
            elif isinstance(rates, str):
                if q in str(rates).upper():
                    results[carrier] = rates
        return results
    
    def _serve_json(self, obj):
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()
        self.wfile.write(json.dumps(obj, indent=2).encode())
    
    def log_message(self, fmt, *args):
        pass  # silenzioso

if __name__ == '__main__':
    server = http.server.HTTPServer(('0.0.0.0', 8081), FAKHandler)
    print(f"[FAK API] Server su http://0.0.0.0:8081")
    server.serve_forever()
