from fastapi import Depends, FastAPI
from fastapi.middleware.cors import CORSMiddleware

from custos_precificacao import config
from custos_precificacao.api.routers import (
    alocacao,
    atividade as atividade_routes,
    auth as auth_routes,
    cenarios,
    centros,
    custos,
    despesas,
    direcionadores,
    elementos,
    estrutura,
    formulacoes,
    impostos,
    importacao as importacao_routes,
    insumos,
    manual,
    planejamentos,
    precificacao,
    primaria,
    rateio_despesas,
    premissas,
    prontidao,
    producao,
    produtos,
    totvs,
    versoes as versoes_routes,
)
from custos_precificacao.atividade import auditar
from custos_precificacao.auth import exigir_usuario

# Em produção a documentação interativa (/docs, /redoc, /openapi.json) fica desligada.
_producao = config.em_producao()
app = FastAPI(
    title="Versus — Custos e Precificação API",
    docs_url=None if _producao else "/docs",
    redoc_url=None if _producao else "/redoc",
    openapi_url=None if _producao else "/openapi.json",
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=config.origens_cors(),
    allow_methods=["*"],
    allow_headers=["*"],
    allow_credentials=True,
)

# Tudo exige usuário logado, exceto /health e o login/logout.
protegido = [Depends(exigir_usuario), Depends(auditar)]

app.include_router(auth_routes.router)
app.include_router(auth_routes.router_usuarios)
app.include_router(atividade_routes.router)
app.include_router(planejamentos.router, dependencies=protegido)
app.include_router(cenarios.router, dependencies=protegido)
app.include_router(custos.router, dependencies=protegido)
app.include_router(premissas.router, dependencies=protegido)
app.include_router(elementos.router, dependencies=protegido)
app.include_router(estrutura.router, dependencies=protegido)
app.include_router(formulacoes.router, dependencies=protegido)
app.include_router(direcionadores.router, dependencies=protegido)
app.include_router(producao.router, dependencies=protegido)
app.include_router(despesas.router, dependencies=protegido)
app.include_router(impostos.router, dependencies=protegido)
app.include_router(precificacao.router, dependencies=protegido)
app.include_router(primaria.router, dependencies=protegido)
app.include_router(rateio_despesas.router, dependencies=protegido)
app.include_router(centros.router, dependencies=protegido)
app.include_router(insumos.router, dependencies=protegido)
app.include_router(produtos.router, dependencies=protegido)
app.include_router(versoes_routes.router, dependencies=protegido)
app.include_router(importacao_routes.router, dependencies=protegido)
app.include_router(totvs.router, dependencies=protegido)
app.include_router(manual.router, dependencies=protegido)
app.include_router(prontidao.router, dependencies=protegido)
app.include_router(alocacao.router, dependencies=protegido)


@app.get("/health")
def health() -> dict[str, str]:
    return {"status": "ok"}
