import sys
sys.path.insert(0, "/var/www/html/metafoliadorv2")

from fastapi import Request
from fastapi.responses import RedirectResponse, HTMLResponse
from starlette.middleware.base import BaseHTTPMiddleware

from app.config import settings
from app.middleware.tenant import resolve_tenant, is_main_domain
from app.models.database import tenant_db_url_ctx


TENANT_INACTIVE_HTML = """<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tenant Inactivo - Metafoliador v2</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { font-family: 'Inter', sans-serif; background: #0f1119; color: #e2e4ed; display: flex; align-items: center; justify-content: center; min-height: 100vh; }
        .card { background: #1a1d2e; border: 1px solid #2a2d3e; border-radius: 16px; padding: 48px; text-align: center; max-width: 480px; box-shadow: 0 8px 32px rgba(0,0,0,0.3); }
        .card h1 { font-size: 24px; margin-bottom: 12px; color: #fe8511; }
        .card p { font-size: 14px; color: #8b8fa8; line-height: 1.6; }
        .card .icon { display: block; width: 64px; height: 64px; margin: 0 auto 24px; color: #ef4444; }
    </style>
</head>
<body>
    <div class="card">
        <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/></svg>
        <h1>Tenant Inactivo</h1>
        <p>Este tenant ha sido desactivado por el administrador.<br>Contacte al soporte para más información.</p>
    </div>
</body>
</html>
"""


class TenantMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        host = request.headers.get("host", "").split(":")[0]

        request.state.is_main = is_main_domain(host)
        request.state.tenant_host = None
        request.state.tenant_inactive = False

        if not request.state.is_main:
            tenant = resolve_tenant(host)
            if tenant:
                if tenant["active"]:
                    request.state.tenant_host = host
                    tenant_db_url_ctx.set(tenant["db_url"])
                else:
                    request.state.tenant_inactive = True
                    request.state.tenant_host = host
                    tenant_db_url_ctx.set(None)
                    return HTMLResponse(content=TENANT_INACTIVE_HTML, status_code=403)
            else:
                tenant_db_url_ctx.set(None)
        else:
            tenant_db_url_ctx.set(None)

        try:
            response = await call_next(request)
            return response
        finally:
            tenant_db_url_ctx.set(None)
