<?php /** @var string $title */ ?>
<div class="card">
  <h1><?= htmlspecialchars($title ?? 'Dados da Empresa') ?></h1>
  <p class="muted">Configure informações da empresa/tenant (stub).</p>
  <section class="card">
    <h3>Autenticação em duas etapas (MFA)</h3>
    <div class="form-row cols-3">
      <div class="form-group">
        <label>Código do autenticador</label>
        <input id="mfa_code" type="text" inputmode="numeric" maxlength="6" placeholder="000000" />
      </div>
      <div class="form-group">
        <label>&nbsp;</label>
        <button id="btn_mfa_verify" class="btn">Verificar e habilitar sessão</button>
      </div>
      <div class="form-group">
        <label>Estado</label>
        <div id="mfa_status" class="muted">MFA requerido para salvar configurações</div>
      </div>
    </div>
    <hr />
    <div class="form-row cols-2">
      <div class="form-group">
        <label>Razão social</label>
        <input id="company_razao_social" type="text" placeholder="Razão social" />
      </div>
      <div class="form-group">
        <label>Nome fantasia</label>
        <input id="company_nome" type="text" placeholder="Nome fantasia" />
      </div>
      <div class="form-group">
        <label>CNPJ</label>
        <input id="company_cnpj" type="text" placeholder="00.000.000/0000-00" inputmode="numeric" />
      </div>
      <div class="form-group">
        <label>Inscrição Estadual</label>
        <input id="company_ie" type="text" />
      </div>
      <div class="form-group">
        <label>E-mail</label>
        <input id="company_email" type="email" placeholder="contato@empresa.com.br" />
      </div>
      <div class="form-group">
        <label>Telefone</label>
        <input id="company_telefone" type="text" placeholder="(00) 0000-0000" />
      </div>
    </div>
    <div class="form-row cols-2">
      <div class="form-group">
        <label>Logradouro</label>
        <input id="company_logradouro" type="text" placeholder="Rua, Av., Travessa..." />
      </div>
      <div class="form-group">
        <label>Número</label>
        <input id="company_numero" type="text" placeholder="123" />
      </div>
      <div class="form-group">
        <label>Complemento</label>
        <input id="company_complemento" type="text" placeholder="Sala, Bloco, Apt." />
      </div>
      <div class="form-group">
        <label>Bairro</label>
        <input id="company_bairro" type="text" />
      </div>
      <div class="form-group">
        <label>Cidade</label>
        <input id="company_cidade" type="text" />
      </div>
      <div class="form-group">
        <label>Estado (UF)</label>
        <input id="company_estado" type="text" maxlength="2" placeholder="RJ" />
      </div>
      <div class="form-group">
        <label>CEP</label>
        <input id="company_cep" type="text" inputmode="numeric" placeholder="00.000-000" />
      </div>
      <div class="form-group">
        <label>País</label>
        <input id="company_pais" type="text" placeholder="Brasil" />
      </div>
    </div>
    <hr />
    <h3>Certificado Digital</h3>
    <div class="form-row cols-2">
      <div class="form-group">
        <label>Tipo de Certificado</label>
        <select id="company_cert_type">
          <option value="">Selecione</option>
          <option value="A1">A1 (arquivo .pfx/.p12)</option>
          <option value="A3">A3 (cartão/token)</option>
        </select>
      </div>
      <div class="form-group" id="cert_file_group" style="display:none;">
        <label>Arquivo do Certificado</label>
        <input id="company_cert_file" type="file" accept=".pfx,.p12" />
      </div>
    </div>
    <div class="form-row cols-2">
      <div class="form-group">
        <label>Senha do Certificado</label>
        <input id="company_cert_password" type="password" placeholder="Senha do certificado" />
      </div>
      <div class="form-group" id="cert_serial_group" style="display:none;">
        <label>Número de Série (A3)</label>
        <input id="company_cert_serial" type="text" placeholder="Serial do dispositivo" />
      </div>
    </div>
    <div class="header" style="margin-top:.5rem;">
      <div></div>
      <div style="display:flex; gap:.5rem;">
        <button id="btn_save_company" class="btn">Salvar</button>
        <button id="btn_cancel_company" class="btn-outline">Cancelar</button>
      </div>
    </div>
  </section>
  <p class="muted">Em construção: persistência multi-tenant e validação de CNPJ.</p>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
  const $ = (id) => document.getElementById(id);
  const api = '/api/settings/company';
  const apiUpload = '/api/settings/company/cert-upload';
  const apiMfaVerify = '/api/auth/mfa/verify';
  const mfaToken = () => localStorage.getItem('mfa_token') || '';
  const authHeaders = (extra = {}) => Object.assign({'Accept': 'application/json', 'x-mfa-token': mfaToken()}, extra);
  const setMfaStatus = () => {
    const tok = mfaToken();
    $('mfa_status').textContent = tok ? 'MFA válido: sessão liberada por 5 minutos' : 'MFA requerido para salvar configurações';
  };
  // Carregar dados
  setMfaStatus();
  fetch(api, { headers: authHeaders() })
    .then(r => r.ok ? r.json() : Promise.reject(r))
    .then(json => {
      const c = json.company || {};
      $('company_razao_social').value = c.razao_social || '';
      $('company_nome').value = c.nome || '';
      $('company_cnpj').value = c.cnpj || '';
      $('company_ie').value = c.ie || '';
      $('company_email').value = c.email || '';
      $('company_telefone').value = c.telefone || '';
      $('company_logradouro').value = c.logradouro || '';
      $('company_numero').value = c.numero || '';
      $('company_complemento').value = c.complemento || '';
      $('company_bairro').value = c.bairro || '';
      $('company_cidade').value = c.cidade || '';
      $('company_estado').value = c.estado || '';
      $('company_cep').value = maskCEP(c.cep || '');
      $('company_pais').value = c.pais || 'Brasil';
      $('company_cert_type').value = c.cert_type || '';
      $('company_cert_password').value = '';
      $('company_cert_serial').value = c.cert_serial || '';
      toggleCertInputs($('company_cert_type').value);
    })
    .catch(async (r) => {
      try { const j = await r.json(); if (j.error) alert('Falha ao carregar: ' + j.error); } catch(e) {}
    });

  function toggleCertInputs(type){
    const isA1 = type === 'A1';
    const isA3 = type === 'A3';
    document.getElementById('cert_file_group').style.display = isA1 ? '' : 'none';
    document.getElementById('cert_serial_group').style.display = isA3 ? '' : 'none';
  }
  $('company_cert_type').addEventListener('change', (e) => toggleCertInputs(e.target.value));

  // MFA verify
  $('btn_mfa_verify').addEventListener('click', async () => {
    const code = $('mfa_code').value.trim();
    if (!code) { alert('Informe o código TOTP do autenticador'); return; }
    try {
      const res = await fetch(apiMfaVerify, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ code }) });
      const j = await res.json();
      if (!res.ok) { alert('MFA inválido: ' + (j.error || res.status)); return; }
      const tok = j.data?.mfa_token || '';
      if (tok) { localStorage.setItem('mfa_token', tok); setMfaStatus(); alert('MFA verificado. Você tem 5 minutos para salvar.'); }
    } catch (e) { alert('Falha ao verificar MFA'); }
  });

  $('btn_save_company').addEventListener('click', async () => {
    const payload = {
      razao_social: $('company_razao_social').value.trim(),
      nome: $('company_nome').value.trim(),
      cnpj: $('company_cnpj').value.trim(),
      ie: $('company_ie').value.trim(),
      email: $('company_email').value.trim(),
      telefone: $('company_telefone').value.trim(),
      logradouro: $('company_logradouro').value.trim(),
      numero: $('company_numero').value.trim(),
      complemento: $('company_complemento').value.trim(),
      bairro: $('company_bairro').value.trim(),
      cidade: $('company_cidade').value.trim(),
      estado: $('company_estado').value.trim().toUpperCase(),
      cep: unmaskCEP($('company_cep').value),
      pais: $('company_pais').value.trim() || 'Brasil',
      cert_type: $('company_cert_type').value,
      cert_password: $('company_cert_password').value,
      cert_serial: $('company_cert_serial').value
    };
    if (!payload.nome) { alert('Nome fantasia é obrigatório'); return; }
    if (!payload.razao_social) { alert('Razão social é obrigatória'); return; }
    if (!/^[0-9]{2}\.[0-9]{3}\.[0-9]{3}\/\d{4}-\d{2}$/.test(maskCNPJ(payload.cnpj))) { alert('CNPJ inválido'); return; }
    if (!/^\d{8}$/.test(payload.cep)) { alert('CEP inválido'); return; }
    if (!/^[A-Z]{2}$/.test(payload.estado)) { alert('UF inválida'); return; }
    try {
      // Upload do arquivo A1 se selecionado
      if (payload.cert_type === 'A1') {
        const file = $('company_cert_file').files?.[0];
        if (!file) { alert('Selecione o arquivo .pfx/.p12 para o certificado A1'); return; }
        const fd = new FormData(); fd.append('file', file);
        const up = await fetch(apiUpload, { method: 'POST', headers: { 'x-mfa-token': mfaToken() }, body: fd });
        if (!up.ok) {
          const err = await up.json().catch(() => ({}));
          alert('Falha no upload do certificado: ' + (err.error?.message || up.status));
          return;
        }
      }
      const res = await fetch(api, {
        method: 'PUT',
        headers: authHeaders({ 'Content-Type': 'application/json' }),
        body: JSON.stringify(payload)
      });
      if (!res.ok) {
        const err = await res.json().catch(() => ({}));
        alert('Erro ao salvar: ' + (err.error || res.status));
        return;
      }
      alert('Dados da empresa salvos com sucesso');
    } catch (e) {
      alert('Falha na requisição');
    }
  });

  $('btn_cancel_company').addEventListener('click', () => {
    // Reload simples dos dados do servidor
    window.location.reload();
  });
  // Máscaras simples
  function maskCEP(v){ const d = (v||'').replace(/\D/g,'').slice(0,8); if (d.length <= 5) return d; return d.slice(0,5) + '-' + d.slice(5); }
  function unmaskCEP(v){ return (v||'').replace(/\D/g,'').slice(0,8); }
  function maskCNPJ(v){ const d=(v||'').replace(/\D/g,'').slice(0,14); const p=[2,5,8,12]; let out=''; for(let i=0;i<d.length;i++){ out+=d[i]; if(i===1||i===4) out+='.'; if(i===7) out+='.'; if(i===11) out+='/'; if(i===12) out+='-'; } return out; }
  $('company_cnpj').addEventListener('input', (e)=>{ e.target.value = maskCNPJ(e.target.value); });
  $('company_cep').addEventListener('input', (e)=>{ e.target.value = maskCEP(e.target.value); });
  $('company_estado').addEventListener('input', (e)=>{ e.target.value = e.target.value.toUpperCase().replace(/[^A-Z]/g,'').slice(0,2); });
});
</script>