"""Rotas da integração com o AnaBlock (configuração + sincronização manual)."""
from __future__ import annotations

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

from .. import anablock, licenca
from ..auth import login_required

bp = Blueprint("anablock", __name__, url_prefix="/anablock")


@bp.post("/sincronizar")
@login_required
@licenca.requer_modulo("anablock")
def sync_now():
    origem = request.form.get("origem") or "dashboard"
    try:
        result = anablock.sync()
        flash(f"AnaBlock sincronizado: {result.mensagem}", "success")
    except anablock.AnaBlockError as exc:
        flash(f"Falha na sincronização do AnaBlock: {exc}", "error")
    if origem == "settings":
        return redirect(url_for("settings.index"))
    return redirect(url_for("dashboard.index"))


@bp.post("/configuracao")
@login_required
@licenca.requer_modulo("anablock")
def save_config():
    token = (request.form.get("token") or "").strip()
    api_url = (request.form.get("api_url") or "").strip() or anablock.DEFAULT_URL
    raw_freq = (request.form.get("frequencia") or "360").strip()
    enabled = request.form.get("enabled") == "on"
    remover = request.form.get("remover_ausentes") == "on"

    try:
        frequencia = int(raw_freq)
    except ValueError:
        flash("A frequência deve ser um número de minutos.", "error")
        return redirect(url_for("settings.index"))
    if frequencia < 15:
        flash("A frequência mínima é de 15 minutos.", "error")
        return redirect(url_for("settings.index"))
    if not api_url.startswith(("http://", "https://")):
        flash("A URL da API deve começar com http:// ou https://.", "error")
        return redirect(url_for("settings.index"))

    # campo em branco preserva o token já gravado
    if not token:
        token = (anablock.get_settings().get("token") or "")

    anablock.save_settings(
        enabled=enabled,
        token=token,
        api_url=api_url,
        frequencia=frequencia,
        remover_ausentes=remover,
    )
    from .. import audit

    audit.log(
        "anablock_config",
        f"enabled={enabled}; url={api_url}; frequencia={frequencia}min; "
        f"remover_ausentes={remover}; token={'definido' if token else 'vazio'}",
    )
    flash("Integração AnaBlock atualizada.", "success")
    return redirect(url_for("settings.index"))
