{% extends "base.html" %}
{% block title %}Configurações{% endblock %}
{% block heading %}Configurações{% endblock %}
{% block content %}
{% set ana_ok = modulo_liberado('anablock') %}

{% if provider_incompleto %}
<div class="flash flash-error">
  Preencha os dados do provedor abaixo: eles aparecem na página exibida ao assinante
  quando um domínio bloqueado é acessado.
</div>
{% endif %}

<section class="panel">
  <h2>Por onde começar</h2>
  <ol class="hint">
    <li><strong>Dados do provedor</strong> — identificação e URL de retorno exibidos na página de bloqueio.</li>
    <li><strong>IP da página de bloqueio</strong> — para onde os domínios bloqueados são redirecionados.</li>
    <li><strong>Licenciamento</strong> — libera a importação automática do AnaBlock e a federação,
      conforme o contrato ativo.</li>
    <li><strong>AnaBlock</strong> — importação automática da lista oficial de ordens judiciais.</li>
    <li><strong>Federação</strong> — troca de listas com outros provedores que usam o DNS Shield ISP
      (tela própria no menu lateral).</li>
  </ol>
  <p class="hint">
    Exportações manuais disponíveis: CSV de bloqueios (aba “Bloqueios judiciais”), CSV de liberações
    (aba “Domínios liberados / Exceções”) e CSV de auditoria (aba “Logs e auditoria”).
  </p>
</section>

<section class="panel narrow">
  <h2>1. Dados do provedor</h2>
  <p class="hint">
    Estes campos alimentam a página de bloqueio servida pelo Nginx na porta 80. Somente o
    nome fantasia é obrigatório; razão social, CNPJ e e-mail só aparecem se preenchidos.
  </p>
  <form method="post">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <label>Nome fantasia
      <input type="text" name="trade_name" value="{{ data.trade_name }}" required maxlength="120"
             placeholder="Ex: Provedor Exemplo Internet" />
    </label>
    <p class="hint">Nome comercial que o assinante reconhece. Exibido em destaque na página de bloqueio.</p>

    <label>Razão social
      <input type="text" name="legal_name" value="{{ data.legal_name }}" maxlength="160" />
    </label>
    <p class="hint">Opcional. Recomendada para dar respaldo jurídico ao aviso exibido.</p>

    <label>CNPJ
      <input type="text" name="cnpj" value="{{ data.cnpj }}" maxlength="20" placeholder="00.000.000/0000-00" />
    </label>
    <p class="hint">Opcional. Se ficar vazio, a linha do CNPJ é omitida da página.</p>

    <label>E-mail de suporte ao assinante
      <input type="email" name="support_email" value="{{ data.support_email }}" maxlength="160"
             placeholder="suporte@seuprovedor.com.br" />
    </label>
    <p class="hint">
      É o canal de atendimento <strong>do provedor ao cliente final</strong> — não use um e-mail
      interno nem o do desenvolvedor.
    </p>

    <label>URL de retorno da página de bloqueio
      <input type="url" name="return_url" value="{{ data.return_url }}" required maxlength="300"
             placeholder="https://seuprovedor.com.br" />
    </label>
    <p class="hint">
      Destino do botão “Voltar a navegar”. Pode ser qualquer domínio (site institucional,
      central do assinante ou uma página explicativa sobre bloqueios judiciais).
    </p>

    <button class="btn btn-primary" type="submit">Salvar dados do provedor</button>
  </form>
  <p class="hint">
    Ao salvar, a página em <code>{{ cfg.sinkhole_root }}/index.html</code> é regravada imediatamente.
  </p>
</section>

<section class="panel narrow">
  <h2>2. IP da página de bloqueio (sinkhole)</h2>
  <p class="hint">
    Todo domínio bloqueado passa a responder com estes endereços em vez do IP real do site.
    O instalador já preencheu com o IP deste servidor Debian; altere apenas se a página de
    bloqueio for servida por outro host.
  </p>
  <form method="post" action="{{ url_for('settings.save_sinkhole') }}">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <label>IPv4 do sinkhole
      <input type="text" name="sinkhole_ip" value="{{ cfg.sinkhole_ip }}" required maxlength="45" />
    </label>
    <p class="hint">Registro A da zona RPZ. Deve ser um IP alcançável pelos assinantes na porta 80.</p>

    <label>IPv6 do sinkhole (opcional)
      <input type="text" name="sinkhole_ipv6" value="{{ cfg.sinkhole_ipv6 }}" maxlength="45"
             placeholder="deixe em branco para não responder AAAA" />
    </label>
    <p class="hint">
      Registro AAAA. Se o provedor entrega IPv6 ao assinante, informe o IPv6 público deste
      servidor; em branco, clientes IPv6 caem no IPv4 por padrão.
    </p>

    <button class="btn btn-primary" type="submit">Salvar IPs e regravar a zona</button>
  </form>
  <p class="hint">
    Ao salvar, o arquivo <code>/etc/dnsshield/config.ini</code> é atualizado e a zona RPZ é
    regravada e recarregada com <code>rndc reload</code>.
  </p>
</section>

<section class="panel narrow">
  <h2>3. Licenciamento (contrato ativo)</h2>
  <p class="hint">
    A importação automática do AnaBlock e a federação entre provedores são módulos licenciados:
    ficam ativos enquanto o contrato do provedor estiver ativo junto a {{ dev_name }}. O painel
    envia apenas o CNPJ e a chave de instalação ao serviço de licenças — nenhum dado de assinante
    sai do servidor. Bloqueios, liberações e importação manual de arquivos funcionam sempre,
    licenciado ou não.
  </p>

  <p class="hint">
    Situação atual:
    <strong>{{ 'módulos liberados' if licenca.autorizado else 'módulos bloqueados' }}</strong> —
    {{ licenca.motivo or licenca.status_label }}<br />
    Status do contrato: {{ licenca.status_label }}{% if licenca.contrato %} · contrato
    {{ licenca.contrato }}{% endif %}{% if licenca.validade %} · válido até {{ licenca.validade }}{% endif %}<br />
    Módulos ativos:
    <strong>{{ licenca.modulos_ativos | join(', ') if licenca.modulos_ativos else 'nenhum' }}</strong><br />
    Última verificação: {{ licenca.ultima_verificacao or 'nunca' }} (UTC) ·
    última resposta válida: {{ licenca.ultima_verificacao_ok or 'nunca' }}
  </p>

  <form method="post" action="{{ url_for('licenca.save_config') }}">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <label>CNPJ do contrato
      <input type="text" name="cnpj" value="{{ licenca.cnpj }}" maxlength="20" required
             placeholder="00.000.000/0000-00" />
    </label>
    <p class="hint">
      Use o mesmo CNPJ cadastrado no contrato com {{ dev_name }} — é por ele que o contrato é
      localizado. Pode ser digitado com ou sem pontuação.
    </p>

    <label>Chave de instalação
      <input type="password" name="chave" autocomplete="new-password"
             placeholder="{{ 'chave já configurada — deixe em branco para manter' if licenca.chave else 'cole a chave enviada com o contrato' }}" />
    </label>
    <p class="hint">
      Entregue junto com o contrato. Ela identifica esta instalação e valida a assinatura da
      resposta do serviço de licenças.
    </p>

    <label>URL do serviço de licenças (avançado)
      <input type="url" name="url" value="{{ licenca.url }}" maxlength="300" required />
    </label>
    <p class="hint">Altere apenas se {{ dev_name }} informar outro endereço.</p>

    <button class="btn btn-primary" type="submit">Salvar e verificar licença</button>
  </form>

  <form method="post" action="{{ url_for('licenca.verificar') }}" class="inline-form">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <button class="btn" type="submit">Verificar agora</button>
  </form>
  <form method="post" action="{{ url_for('licenca.usar_cnpj_provedor') }}" class="inline-form">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <button class="btn" type="submit">Usar o CNPJ dos dados do provedor</button>
  </form>

  <p class="hint">
    A verificação é repetida automaticamente todos os dias. Se o serviço de licenças ficar
    inacessível, o último resultado positivo continua valendo por {{ licenca.carencia_dias }} dias.
  </p>
</section>

<section class="panel narrow">
  <h2>4. Integração AnaBlock</h2>
  <p class="hint">
    O AnaBlock (<code>anablock.net.br</code>) distribui a lista oficial de domínios com ordem de
    bloqueio no Brasil. Com o token configurado, o sistema importa a lista automaticamente.
  </p>
  {% if not ana_ok %}
  <div class="flash flash-error">
    <strong>Módulo em modo demonstração.</strong> {{ licenca.motivo }} A sincronização automática
    está desativada; use “Bloqueios judiciais → Importar em massa” para aplicar listas manualmente.
  </div>
  {% endif %}
  <form method="post" action="{{ url_for('anablock.save_config') }}">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <label class="check">
      <input type="checkbox" name="enabled" {% if anablock.enabled %}checked{% endif %} {% if not ana_ok %}disabled{% endif %} />
      Sincronização automática habilitada
    </label>
    <p class="hint">Desmarcado, a lista só é atualizada quando você clicar em “Sincronizar agora”.</p>

    <label>Token da API do AnaBlock
      <input type="password" name="token" autocomplete="new-password"
             placeholder="{{ 'token já configurado — deixe em branco para manter' if anablock.token else 'cole o token fornecido pelo AnaBlock' }}" {% if not ana_ok %}disabled{% endif %} />
    </label>
    <p class="hint">Solicitado no cadastro da operadora no AnaBlock. Campo vazio preserva o token atual.</p>

    <label>Endpoint da API
      <input type="url" name="api_url" value="{{ anablock.api_url }}" maxlength="300" required {% if not ana_ok %}disabled{% endif %} />
    </label>
    <p class="hint">Altere apenas se o AnaBlock informar um endereço diferente do padrão.</p>

    <label>Frequência de sincronização (minutos, mínimo 15)
      <input type="number" name="frequencia" value="{{ anablock.frequencia }}" min="15" max="10080" required {% if not ana_ok %}disabled{% endif %} />
    </label>
    <p class="hint">360 minutos (6 h) atende a maioria dos provedores.</p>

    <label class="check">
      <input type="checkbox" name="remover_ausentes" {% if anablock.remover_ausentes %}checked{% endif %} {% if not ana_ok %}disabled{% endif %} />
      Remover da zona RPZ os domínios que saírem da lista do AnaBlock
    </label>
    <p class="hint">
      Recomendado: mantém a zona fiel à lista oficial quando uma ordem é revogada. Bloqueios
      cadastrados manualmente nunca são afetados.
    </p>

    <button class="btn btn-primary" type="submit" {% if not ana_ok %}disabled{% endif %}>Salvar integração</button>
  </form>

  <form method="post" action="{{ url_for('anablock.sync_now') }}" class="inline-form">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <input type="hidden" name="origem" value="settings" />
    <button class="btn" type="submit" {% if not ana_ok %}disabled{% endif %}>Sincronizar AnaBlock agora</button>
  </form>

  <p class="hint">
    Última sincronização: <strong>{{ anablock.ultima_sincronizacao or 'nunca' }}</strong> (UTC)<br />
    Domínios na última lista: <strong>{{ anablock.total_importados }}</strong><br />
    Status: {{ anablock.ultimo_status or 'sem execuções registradas' }}
  </p>
  <p class="hint">
    Domínios cadastrados em “Domínios liberados / Exceções” têm prioridade sobre a lista do
    AnaBlock: mesmo que apareçam na lista oficial, continuam resolvendo normalmente
    (regra de passthrough).
  </p>
</section>

<section class="panel narrow">
  <h2>5. Federação entre provedores</h2>
  <p class="hint">
    Além do AnaBlock, este servidor pode publicar as próprias listas e consumir as listas de
    outras instalações do DNS Shield ISP. A configuração fica na tela
    <a href="{{ url_for('federacao.index') }}">Federação entre provedores</a>.
  </p>
</section>

{% endblock %}
