"""Rotas de licenciamento (Configurações → Licenciamento)."""
from __future__ import annotations

from flask import Blueprint, flash, redirect, request, url_for

from .. import audit, licenca
from ..auth import login_required
from ..db import get_provider

bp = Blueprint("licenca", __name__, url_prefix="/licenciamento")


@bp.post("/configuracao")
@login_required
def save_config():
    cnpj = licenca.somente_digitos(request.form.get("cnpj") or "")
    chave = (request.form.get("chave") or "").strip()
    url = (request.form.get("url") or "").strip() or licenca.DEFAULT_URL

    if len(cnpj) not in (11, 14):
        flash("Informe um CNPJ (14 dígitos) ou CPF (11 dígitos) válido.", "error")
        return redirect(url_for("settings.index"))
    if not url.startswith(("http://", "https://")):
        flash("A URL do serviço de licenças deve começar com http:// ou https://.", "error")
        return redirect(url_for("settings.index"))

    licenca.save_settings(cnpj=cnpj, chave=chave, url=url)
    audit.log(
        "licenca_config",
        f"cnpj={cnpj}; url={url}; chave={'definida' if chave else 'preservada'}",
    )

    estado = licenca.verificar()
    audit.log("licenca_verificacao", f"status={estado['status']}; {estado['motivo']}")
    if estado["autorizado"]:
        flash(
            "Licença ativa. Módulos liberados: "
            + ", ".join(licenca.MODULO_LABEL.get(m, m) for m in estado["modulos_ativos"]),
            "success",
        )
    else:
        flash(f"Licenciamento salvo, mas os módulos seguem bloqueados: {estado['motivo']}", "error")
    return redirect(url_for("settings.index"))


@bp.post("/verificar")
@login_required
def verificar():
    estado = licenca.verificar()
    audit.log("licenca_verificacao", f"status={estado['status']}; {estado['motivo']}")
    if estado["autorizado"]:
        flash(f"Licença confirmada: {estado['motivo']}", "success")
    else:
        flash(f"Licença não autorizada: {estado['motivo']}", "error")
    origem = request.form.get("origem") or "settings"
    if origem == "dashboard":
        return redirect(url_for("dashboard.index"))
    return redirect(url_for("settings.index"))


@bp.post("/usar-cnpj-do-provedor")
@login_required
def usar_cnpj_provedor():
    """Atalho: copia o CNPJ cadastrado em Dados do provedor."""
    cnpj = licenca.somente_digitos(get_provider().get("cnpj") or "")
    if not cnpj:
        flash("Cadastre o CNPJ em Dados do provedor antes de usar este atalho.", "error")
        return redirect(url_for("settings.index"))
    atual = licenca.get_settings()
    licenca.save_settings(cnpj=cnpj, chave=atual.get("chave") or "", url=atual.get("url") or "")
    flash("CNPJ copiado dos dados do provedor.", "success")
    return redirect(url_for("settings.index"))
