from fastapi import FastAPI, HTTPException, Query, Request
from fastapi.responses import FileResponse
from typing import Dict
from app.database import fetch_produto_por_sku, fetch_produtos_por_termos
import os

app = FastAPI(title="API Produtos Aweda")

from fastapi import Security, Depends
from fastapi.security.api_key import APIKeyHeader
import os

api_key_header = APIKeyHeader(name="X-API-Key", auto_error=True)

def verificar_api_key(api_key: str = Depends(api_key_header)):
    if api_key != os.getenv("API_KEY"):
        raise HTTPException(status_code=403, detail="Chave de API inválida")


# 1. Busca por SKU exato
@app.get("/produtos/{sku}")
def buscar_por_sku(sku: str, request: Request = None):
    try:
        print("========== REQ SKU ==========")
        print(f"URL: {request.url}")
        print(f"User-Agent: {request.headers.get('user-agent')}")
        print(f"SKU solicitado: {sku}")
        print("==============================")

        produto = fetch_produto_por_sku(sku.strip())
        if produto:
            return produto
        raise HTTPException(status_code=404, detail="Produto não encontrado")
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

# 2. Busca por características com suporte híbrido
@app.get("/produtos/")
def buscar_por_termos(q: str = None, request: Request = None):
    try:
        termos = []

        if q:
            import re
            # Limpeza robusta de entradas com aspas
            q = re.sub(r'["\'\[\]]', '', q).strip()
            termos = [termo.strip() for termo in q.split(",") if termo.strip()]
        else:
            termos_raw: Dict[str, str] = dict(request.query_params)
            termos = [termos_raw[key] for key in sorted(termos_raw.keys()) if key.isdigit()]

        print("========= REQ TERMO (ambos) =========")
        print(f"URL: {request.url}")
        print(f"User-Agent: {request.headers.get('user-agent')}")
        print(f"Termos extraídos: {termos}")
        print("=====================================")

        if not termos:
            raise HTTPException(status_code=400, detail="Nenhum termo de busca informado")

        resultados = fetch_produtos_por_termos(termos)
        if not resultados:
            raise HTTPException(status_code=404, detail="Nenhum produto encontrado com essas características")
        return resultados

    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
