#!/usr/bin/env python3
"""
microlino_http_bridge.py — OPZIONALE
=====================================================================
Non serve per far funzionare la webapp: di default app/js/mcp-client.js
parla direttamente con l'ESP32 via WiFi (stesse API JSON usate da
microlino_mcp_server.py). Vedi la nota in cima a quel file per il
perché di questa scelta.

Questo script esiste per l'alternativa "il telefono passa dal bridge
Python invece che dall'ESP32 direttamente": un piccolo server HTTP/CORS
che espone via REST le stesse funzioni di microlino_mcp_server.py,
così potete far girare la stessa logica Python (utile se un domani
aggiungete elaborazioni lato bridge, es. storicizzazione, alert, ecc.)
e restare comunque raggiungibili da un browser.

Uso:
    pip install flask flask-cors requests
    python bridge/microlino_http_bridge.py
    # di default ascolta su 0.0.0.0:8765

Poi, nella webapp, cambiate la sorgente dati impostando come "indirizzo
ESP32" nelle Opzioni l'indirizzo di QUESTO bridge (es. http://<IP-PC>:8765)
invece di quello dell'ESP32: i path (/api/cluster, /api/dtc, ecc.) sono
gli stessi, quindi mcp-client.js funziona senza modifiche.
"""
import os
import sys

try:
    from flask import Flask, jsonify, request
    from flask_cors import CORS
except ImportError:
    sys.exit("Mancano le dipendenze. Installa con: pip install flask flask-cors requests")

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "WebApp_Microlino"))
try:
    from microlino_mcp_server import (
        get_device_info,
        get_cluster_status,
        get_dtc_codes,
        clear_dtc_codes,
        get_gps_position,
        get_flash_status,
        get_can_debug_log,
    )
except ImportError as exc:
    sys.exit(
        "Impossibile importare microlino_mcp_server.py: assicurati che sia nella "
        f"cartella del progetto e che 'microlino_config.py' esista. Dettaglio: {exc}"
    )

app = Flask(__name__)
CORS(app)  # necessario perché la webapp gira su un'origine diversa dal bridge


@app.get("/api/info")
def api_info():
    return jsonify(get_device_info())


@app.get("/api/cluster")
def api_cluster():
    return jsonify(get_cluster_status())


@app.get("/api/dtc")
def api_dtc():
    return jsonify(get_dtc_codes())


@app.post("/api/dtc/clear")
def api_dtc_clear():
    return jsonify(clear_dtc_codes())


@app.get("/api/gps")
def api_gps():
    return jsonify(get_gps_position())


@app.get("/api/status")
def api_status():
    return jsonify(get_flash_status())


@app.get("/api/canlog")
def api_canlog():
    return get_can_debug_log(), 200, {"Content-Type": "text/plain"}


if __name__ == "__main__":
    port = int(os.environ.get("MICROLINO_BRIDGE_PORT", "8765"))
    print(f"[microlino-http-bridge] in ascolto su 0.0.0.0:{port}", file=sys.stderr)
    app.run(host="0.0.0.0", port=port)
