from http.server import HTTPServer, SimpleHTTPRequestHandler
from socketserver import ThreadingMixIn
from pathlib import Path
import os, shutil

HOST = "0.0.0.0"
PORT = 8765
EXCEL_PATH = Path("/var/www/html/potenciales/Potenciales.xlsx")
BASE_DIR = Path(__file__).resolve().parent
DASHBOARD = BASE_DIR / "Tablero_Potenciales_Migraciones_BF.html"

class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
    pass

class Handler(SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0")
        self.send_header("Pragma", "no-cache")
        self.send_header("Expires", "0")
        super().end_headers()

    def do_GET(self):
        path = self.path.split("?", 1)[0]
        if path in ("/", "/index.html"):
            return self.send_file(DASHBOARD, "text/html; charset=utf-8")
        if path == "/data/Potenciales.xlsx":
            if not EXCEL_PATH.exists():
                self.send_error(404, "No se encontro: " + str(EXCEL_PATH))
                return
            return self.send_file(EXCEL_PATH, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
        return super().do_GET()

    def send_file(self, file_path, content_type):
        try:
            stat = file_path.stat()
            self.send_response(200)
            self.send_header("Content-Type", content_type)
            self.send_header("Content-Length", str(stat.st_size))
            self.send_header("Last-Modified", self.date_time_string(stat.st_mtime))
            self.end_headers()
            with file_path.open("rb") as src:
                shutil.copyfileobj(src, self.wfile)
        except BrokenPipeError:
            pass

    def log_message(self, fmt, *args):
        print("[%s] %s - %s" % (self.log_date_time_string(), self.address_string(), fmt % args))

if __name__ == "__main__":
    os.chdir(str(BASE_DIR))
    print("=" * 60)
    print("TABLERO POTENCIALES - SERVIDOR UBUNTU")
    print("=" * 60)
    print("Excel: " + str(EXCEL_PATH))
    print("OK" if EXCEL_PATH.exists() else "ADVERTENCIA: Excel no encontrado")
    print("Puerto: " + str(PORT))
    print("=" * 60)
    server = ThreadingHTTPServer((HOST, PORT), Handler)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print("Servidor detenido.")
    finally:
        server.server_close()
