<?php
session_start();
require_once __DIR__ . '/config.php';
securityHeaders();
$erroServidor = '';
if (!empty($_SESSION['erro_form'])) {
    $erroServidor = $_SESSION['erro_form'];
    unset($_SESSION['erro_form']);
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Inscrição – Praça de Alimentação | XXXI EPROSOL 2026</title>
<meta name="description" content="Formulário de inscrição para ocupar espaço na Praça de Alimentação da XXXI EPROSOL 2026 – Soledade de Minas MG.">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
  :root{
    --azul-escuro: #0d3a63;
    --azul: #15578f;
    --azul-medio: #2678b8;
    --azul-claro: #eaf2fa;
    --azul-borda: #c9dcef;
    --fundo: #f5f8fb;
    --texto: #1c2733;
    --texto-suave: #55647a;
    --borda: #d7dfe8;
    --branco: #ffffff;
    --vermelho: #b3261e;
    --vermelho-fundo: #fbe9e7;
    --vermelho-borda: #eab7b1;
    --verde: #1a7741;
    --verde-fundo: #e6f4ec;
    --verde-borda: #a8d5bc;
  }
  *{ box-sizing: border-box; }
  input, button, select, textarea { font-family: inherit; font-size: inherit; }
  body{
    margin:0;
    font-family:'Inter','Segoe UI',Arial,sans-serif;
    background: var(--fundo);
    color: var(--texto);
    line-height: 1.55;
  }
  .topo{
    background: var(--azul-escuro);
    color: #eaf2fa;
    padding: 28px 20px;
    text-align:center;
  }
  .topo .brasao{
    font-size: 13px;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #a9c8e6;
    margin-bottom: 6px;
  }
  .topo h1{
    font-family: 'Georgia', serif;
    font-size: 26px;
    margin: 4px 0 6px;
    font-weight: 600;
  }
  .topo p{
    margin:0;
    font-size: 14px;
    color: #cfe1f2;
  }
  .faixa{
    height: 4px;
    background: linear-gradient(90deg, var(--azul-medio), #6fa8d8, var(--azul-medio));
  }
  main{
    max-width: 680px;
    margin: 0 auto;
    padding: 32px 20px 80px;
  }
  .intro{
    background: var(--branco);
    border: 1px solid var(--borda);
    border-left: 4px solid var(--azul);
    padding: 18px 22px;
    margin-bottom: 24px;
    font-size: 15px;
    color: var(--texto-suave);
  }
  .intro strong{ color: var(--texto); }
  fieldset{
    border: none;
    padding: 0;
    margin: 0 0 30px;
  }
  legend{
    font-family: 'Georgia', serif;
    font-size: 18px;
    font-weight: 600;
    color: var(--azul-escuro);
    padding-bottom: 8px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--borda);
    width: 100%;
  }
  label{
    display:block;
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 6px;
    color: var(--texto);
  }
  .campo{ margin-bottom: 18px; }
  .ajuda{
    font-size: 12.5px;
    color: var(--texto-suave);
    margin-top: 4px;
  }
  input[type="text"], input[type="email"], input[type="tel"]{
    width: 100%;
    padding: 11px 12px;
    font-family: inherit;
    font-size: 15px;
    border: 1px solid var(--borda);
    border-radius: 3px;
    background: var(--branco);
    color: var(--texto);
    transition: border-color .15s ease;
  }
  input:focus, textarea:focus, select:focus{
    outline: 2px solid var(--azul);
    outline-offset: 1px;
    border-color: var(--azul);
  }
  input.campo-invalido{
    border-color: var(--vermelho) !important;
    outline-color: var(--vermelho) !important;
  }
  input.campo-valido{
    border-color: var(--verde);
  }
  .erro-campo{
    display: none;
    font-size: 12.5px;
    color: var(--vermelho);
    margin-top: 5px;
    align-items: center;
    gap: 5px;
  }
  .erro-campo.visivel{
    display: flex;
  }
  .opcoes-barraca{
    display: grid;
    gap: 12px;
  }
  .opcao-barraca{
    display:flex;
    align-items:flex-start;
    gap: 12px;
    border: 1px solid var(--borda);
    border-radius: 4px;
    padding: 14px 16px;
    background: var(--branco);
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
  }
  .opcao-barraca:hover{ border-color: var(--azul); }
  .opcao-barraca input[type="radio"]{
    margin-top: 3px;
    width: 18px;
    height: 18px;
    accent-color: var(--azul);
    flex-shrink: 0;
  }
  .opcao-barraca .rotulo{
    font-weight: 600;
    font-size: 15px;
    color: var(--texto);
  }
  .opcao-barraca .detalhe{
    font-size: 13px;
    color: var(--texto-suave);
    margin-top: 2px;
  }
  .opcao-barraca:has(input:checked){
    border-color: var(--azul);
    background: var(--azul-claro);
  }
  .upload{
    border: 1.5px dashed var(--borda);
    border-radius: 4px;
    padding: 16px;
    background: var(--branco);
    transition: border-color .15s ease;
  }
  .upload.invalido{ border-color: var(--vermelho); }
  .upload.valido{ border-color: var(--verde); }
  .upload input[type="file"]{
    font-family: inherit;
    font-size: 13.5px;
    width: 100%;
  }
  .upload-info{
    font-size: 12px;
    color: var(--texto-suave);
    margin-top: 6px;
  }
  .bloco-procurador{
    border-left: 3px solid var(--azul-medio);
    padding-left: 16px;
    margin-top: 16px;
    display: none;
  }
  .bloco-procurador.ativo{ display: block; }
  .checkbox-linha{
    display:flex;
    align-items:flex-start;
    gap: 10px;
    font-size: 13.5px;
    color: var(--texto-suave);
  }
  .checkbox-linha input{
    margin-top: 3px;
    width: 17px;
    height: 17px;
    accent-color: var(--azul);
    flex-shrink: 0;
  }
  .painel-importante{
    background: var(--branco);
    border: 1px solid var(--azul-borda);
    border-radius: 4px;
    padding: 20px 22px;
    margin-bottom: 24px;
  }
  .painel-importante h2{
    font-size: 16px;
    color: var(--azul-escuro);
    margin: 0 0 12px;
  }
  .painel-importante ul{
    margin: 0;
    padding-left: 20px;
    font-size: 13.5px;
    color: var(--texto-suave);
  }
  .painel-importante li{ margin-bottom: 8px; }
  .painel-importante li:last-child{ margin-bottom: 0; }
  .painel-importante strong{ color: var(--texto); }

  .aviso{
    display:flex;
    gap: 10px;
    align-items:flex-start;
    background: var(--vermelho-fundo);
    border: 1px solid var(--vermelho-borda);
    border-radius: 4px;
    padding: 14px 16px;
    font-size: 13.5px;
    color: var(--vermelho);
    margin-bottom: 22px;
  }
  .aviso-inline{
    display:flex;
    gap: 8px;
    align-items:flex-start;
    background: var(--vermelho-fundo);
    border: 1px solid var(--vermelho-borda);
    border-radius: 4px;
    padding: 10px 14px;
    font-size: 12.5px;
    color: var(--vermelho);
    margin-top: 8px;
  }
  .aviso-geral{
    display: none;
    gap: 10px;
    align-items: flex-start;
    background: var(--vermelho-fundo);
    border: 1px solid var(--vermelho-borda);
    border-radius: 4px;
    padding: 14px 16px;
    font-size: 13.5px;
    color: var(--vermelho);
    margin-bottom: 18px;
  }
  .aviso-geral.visivel{ display: flex; }
  .simbolo-alerta{
    flex-shrink: 0;
    font-size: 15px;
    line-height: 1;
    margin-top: 1px;
  }
  .botao-enviar{
    width: 100%;
    background: var(--azul);
    color: #fff;
    border: none;
    padding: 15px;
    font-family: inherit;
    font-size: 16px;
    font-weight: 600;
    border-radius: 3px;
    cursor: pointer;
    transition: background .15s ease;
  }
  .botao-enviar:hover{ background: var(--azul-escuro); }
  .botao-enviar:disabled{ background: #a9b7c6; cursor: not-allowed; }
  .rodape-form{
    text-align:center;
    font-size: 12.5px;
    color: var(--texto-suave);
    margin-top: 14px;
  }
  .obrigatorio{ color: var(--vermelho); }

  /* Spinner de envio */
  .spinner{
    display: inline-block;
    width: 16px;
    height: 16px;
    border: 2px solid rgba(255,255,255,.4);
    border-top-color: #fff;
    border-radius: 50%;
    animation: spin .7s linear infinite;
    vertical-align: middle;
    margin-right: 8px;
  }
  @keyframes spin{ to{ transform: rotate(360deg); } }
</style>
</head>
<body>

<div class="topo">
  <div class="brasao">Prefeitura Municipal de Soledade de Minas – MG</div>
  <h1>Inscrição · Praça de Alimentação</h1>
  <p>XXXI EPROSOL 2026 — 23 a 27 de setembro</p>
</div>
<div class="faixa"></div>

<main>
  <div class="intro">
    Este formulário destina-se exclusivamente às pessoas jurídicas interessadas em ocupar um dos <strong>21 espaços da Praça de Alimentação</strong> da XXXI EPROSOL, nos termos do Decreto que regulamenta o evento. A inscrição não garante, por si só, direito a espaço específico. Havendo mais inscritos do que vagas em determinada dimensão, será realizado sorteio público para definição da ordem de chamada.
  </div>

  <div class="painel-importante">
    <h2>Antes de se inscrever, leia com atenção</h2>
    <ul>
      <li><strong>Uma empresa, um espaço.</strong> É vedada a concessão de mais de um espaço para a mesma empresa, inclusive mediante inscrição em nome de sócios, administradores, funcionários ou prepostos vinculados a ela.</li>
      <li><strong>Prazo de pagamento após convocação: 24 horas.</strong> Se houver mais inscritos do que vagas em determinada dimensão, será feito sorteio público. O convocado terá 24 horas, a partir do envio da convocação, para pagar a guia — do contrário, perde a vez e pode reingressar apenas ao final da lista, mediante manifestação expressa.</li>
      <li><strong>Local exato definido pela Administração.</strong> A escolha do ponto específico dentro da área sorteada é discricionária do Departamento Municipal de Turismo e Cultura, conforme a logística de montagem do evento.</li>
      <li><strong>Autorização pessoal e intransferível.</strong> É proibida a venda, cessão, transferência, locação, sublocação ou empréstimo do espaço a terceiros, sob pena de cancelamento da autorização e desocupação, sem prejuízo de outras medidas administrativas.</li>
      <li><strong>Prazos de montagem e desmontagem.</strong> A montagem só pode ocorrer nos 3 dias que antecedem o evento, com a estrutura pronta antes da abertura oficial; a desmontagem e devolução do espaço limpo devem ocorrer em até 3 dias após o encerramento.</li>
      <li><strong>Sem direito de permanência futura.</strong> A autorização vale apenas para esta edição e não gera direito a preferência ou reserva do mesmo espaço em edições futuras da EPROSOL.</li>
    </ul>
  </div>

  <!-- Aviso de erro do servidor (redirect de processar.php) -->
  <?php if ($erroServidor): ?>
  <div class="aviso" style="margin-bottom:22px;" role="alert">
    <span class="simbolo-alerta">⚠</span>
    <span><strong>Erro ao processar a inscrição:</strong> <?php echo htmlspecialchars($erroServidor, ENT_QUOTES, 'UTF-8'); ?></span>
  </div>
  <?php endif; ?>

  <!-- Aviso de campos inválidos (aparece ao tentar enviar) -->
  <div id="avisoGeral" class="aviso-geral">
    <span class="simbolo-alerta">⚠</span>
    <span id="avisoGeralTexto">Corrija os campos destacados abaixo antes de enviar.</span>
  </div>

  <form id="formInscricao" method="POST" action="processar.php" enctype="multipart/form-data" novalidate>
    <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars(csrfToken(), ENT_QUOTES, 'UTF-8'); ?>">

    <fieldset>
      <legend>1. Dados da empresa e do responsável</legend>

      <div class="campo">
        <label for="razaoSocial">Razão social / nome da empresa <span class="obrigatorio">*</span></label>
        <input type="text" id="razaoSocial" name="razaoSocial" autocomplete="organization" required>
        <div class="erro-campo" id="erroRazaoSocial">⚠ Informe a razão social.</div>
      </div>

      <div class="campo">
        <label for="cnpj">CNPJ <span class="obrigatorio">*</span></label>
        <input type="text" id="cnpj" name="cnpj" placeholder="00.000.000/0000-00" maxlength="18" autocomplete="off" required>
        <div class="erro-campo" id="erroCnpj">⚠ CNPJ inválido. Verifique os dígitos.</div>
        <div class="aviso-inline"><span class="simbolo-alerta">⚠</span><span>Se esta empresa já utiliza permanentemente espaço público municipal para comercialização de produtos, a concessão de espaço adicional na EPROSOL pode ser vedada em caso de duplicidade de benefício, salvo situação excepcional justificada pela Administração.</span></div>
      </div>

      <div class="campo">
        <label for="nomeRepresentante">Nome do representante legal (constante no CNPJ) <span class="obrigatorio">*</span></label>
        <input type="text" id="nomeRepresentante" name="nomeRepresentante" autocomplete="name" required>
        <div class="erro-campo" id="erroNomeRepresentante">⚠ Informe o nome do representante legal.</div>
      </div>

      <div class="campo">
        <label for="cpfRepresentante">CPF do representante legal (ou do procurador, se for o caso) <span class="obrigatorio">*</span></label>
        <input type="text" id="cpfRepresentante" name="cpfRepresentante" placeholder="000.000.000-00" maxlength="14" autocomplete="off" required>
        <div class="erro-campo" id="erroCpfRepresentante">⚠ CPF inválido. Verifique os dígitos.</div>
      </div>

      <div class="campo">
        <label for="telefone">Telefone para contato <span class="obrigatorio">*</span></label>
        <input type="tel" id="telefone" name="telefone" placeholder="(35) 90000-0000" maxlength="15" autocomplete="tel" required>
        <div class="erro-campo" id="erroTelefone">⚠ Informe um telefone celular válido com DDD.</div>
      </div>

      <div class="campo">
        <label for="email">E-mail para contato <span class="obrigatorio">*</span></label>
        <input type="email" id="email" name="email" autocomplete="email" required>
        <div class="erro-campo" id="erroEmail">⚠ Informe um e-mail válido (ex.: nome@dominio.com.br).</div>
        <div class="ajuda">A confirmação da vaga ou a convocação para o sorteio será enviada para este e-mail em até 24 horas após o encerramento das inscrições.</div>
        <div class="aviso-inline"><span class="simbolo-alerta">⚠</span><span>Verifique se o e-mail e o telefone estão corretos: é por esse canal que você será avisado sobre a vaga ou convocado para o sorteio, dentro de prazos curtos e improrrogáveis.</span></div>
      </div>
    </fieldset>

    <fieldset>
      <legend>2. Tamanho da barraca desejado</legend>
      <div class="ajuda" style="margin-bottom:12px;">Selecione apenas uma opção. As vagas de cada dimensão são limitadas e independentes entre si — não é possível trocar de categoria depois de sorteado.</div>
      <div class="aviso-inline" style="margin-bottom:16px;"><span class="simbolo-alerta">⚠</span><span>A inscrição não assegura, por si só, direito a espaço específico, nem qualquer prioridade em razão do momento em que for realizada dentro do prazo de inscrição. Havendo mais inscritos do que vagas na dimensão escolhida, a ordem de chamada será definida por sorteio público, com data e local divulgados com antecedência mínima de 24 horas.</span></div>

      <div class="opcoes-barraca" role="radiogroup" aria-label="Tamanho da barraca">
        <label class="opcao-barraca">
          <input type="radio" name="tamanhoBarraca" value="2x2" required>
          <span>
            <span class="rotulo">2,00 m × 2,00 m</span>
            <span class="detalhe">3 vagas</span>
          </span>
        </label>

        <label class="opcao-barraca">
          <input type="radio" name="tamanhoBarraca" value="3x3" required>
          <span>
            <span class="rotulo">3,00 m × 3,00 m</span>
            <span class="detalhe">8 vagas</span>
          </span>
        </label>

        <label class="opcao-barraca">
          <input type="radio" name="tamanhoBarraca" value="4x4" required>
          <span>
            <span class="rotulo">4,00 m × 4,00 m</span>
            <span class="detalhe">10 vagas</span>
          </span>
        </label>
      </div>
      <div class="erro-campo" id="erroTamanhoBarraca" style="margin-top:10px;">⚠ Selecione o tamanho da barraca desejado.</div>
    </fieldset>

    <fieldset>
      <legend>3. Documentação obrigatória</legend>

      <div class="painel-importante" style="margin-bottom:20px;">
        <h2>Documentos exigidos nesta etapa</h2>
        <ul>
          <li><strong>Comprovante de inscrição e situação cadastral no CNPJ</strong> — obrigatório para todos.</li>
          <li><strong>CPF</strong> do representante legal ou, se a inscrição for feita por procurador, do próprio procurador — obrigatório para todos.</li>
          <li><strong>Comprovante de endereço</strong> (conta de água, luz ou telefone, ou documento equivalente) do representante legal ou do procurador — obrigatório para todos.</li>
          <li><strong>Documento de identificação oficial com foto</strong> — do representante legal indicado no CNPJ ou, se a inscrição for feita por procurador, do próprio procurador.</li>
          <li><strong>Procuração específica</strong> — obrigatória apenas quando a inscrição for realizada por procurador, com poderes expressos para representar a empresa na inscrição, sorteio e ocupação do espaço na EPROSOL, com firma reconhecida em cartório (por autenticidade ou por semelhança) ou assinada digitalmente via certificação ICP-Brasil.</li>
        </ul>
        <div class="ajuda" style="margin-top:10px;">Todos os documentos devem ser enviados em formato PDF, JPG ou PNG. <strong>Limite: 3 MB por arquivo.</strong></div>
      </div>

      <div class="campo">
        <label for="docCnpj">Comprovante de inscrição e situação cadastral no CNPJ <span class="obrigatorio">*</span></label>
        <div class="upload" id="uploadDocCnpj">
          <input type="file" id="docCnpj" name="docCnpj" accept=".pdf,.jpg,.jpeg,.png" required>
          <div class="upload-info">PDF, JPG ou PNG · máx. 3 MB</div>
        </div>
        <div class="erro-campo" id="erroDocCnpj">⚠ Selecione um arquivo PDF, JPG ou PNG com até 3 MB.</div>
      </div>

      <div class="campo">
        <label for="docComprovanteEndereco">Comprovante de endereço <span class="obrigatorio">*</span></label>
        <div class="upload" id="uploadDocEndereco">
          <input type="file" id="docComprovanteEndereco" name="docComprovanteEndereco" accept=".pdf,.jpg,.jpeg,.png" required>
          <div class="upload-info">PDF, JPG ou PNG · máx. 3 MB · emitido nos últimos 3 meses</div>
        </div>
        <div class="erro-campo" id="erroDocEndereco">⚠ Selecione um arquivo PDF, JPG ou PNG com até 3 MB.</div>
      </div>

      <div class="campo checkbox-linha">
        <input type="checkbox" id="inscricaoPorProcurador" name="porProcurador">
        <label for="inscricaoPorProcurador" style="font-weight:400; margin:0;">Esta inscrição está sendo realizada por procurador (e não pelo representante legal indicado no CNPJ)</label>
      </div>

      <div class="campo">
        <label id="rotuloDocIdentificacao" for="docIdentificacao">Documento de identificação oficial com foto do representante legal <span class="obrigatorio">*</span></label>
        <div class="upload" id="uploadDocIdentificacao">
          <input type="file" id="docIdentificacao" name="docIdentificacao" accept=".pdf,.jpg,.jpeg,.png" required>
          <div class="upload-info">PDF, JPG ou PNG · máx. 3 MB</div>
        </div>
        <div class="erro-campo" id="erroDocIdentificacao">⚠ Selecione um arquivo PDF, JPG ou PNG com até 3 MB.</div>
      </div>

      <div id="blocoProcurador" class="bloco-procurador">
        <div class="campo">
          <label for="docProcuracao">Procuração específica, com poderes para representar a empresa na inscrição, sorteio e ocupação de espaço <span class="obrigatorio">*</span></label>
          <div class="upload" id="uploadDocProcuracao">
            <input type="file" id="docProcuracao" name="docProcuracao" accept=".pdf,.jpg,.jpeg,.png">
            <div class="upload-info">PDF, JPG ou PNG · máx. 3 MB · firma reconhecida em cartório ou assinatura digital ICP-Brasil</div>
          </div>
          <div class="erro-campo" id="erroDocProcuracao">⚠ Selecione um arquivo PDF, JPG ou PNG com até 3 MB.</div>
        </div>
      </div>

      <div class="aviso"><span class="simbolo-alerta">⚠</span><span>Documento ausente, ilegível ou com inconsistência resulta em indeferimento sumário da inscrição. Havendo dúvida fundada sobre a documentação, o Departamento de Turismo pode pedir esclarecimentos ou complementos, com prazo de apenas 24 horas para regularização.</span></div>
    </fieldset>

    <div class="campo checkbox-linha" style="margin-bottom:22px;">
      <input type="checkbox" id="aceiteTermos" name="aceiteTermos" required>
      <label for="aceiteTermos" style="font-weight:400; margin:0;">Li e estou de acordo com as regras do Decreto que regulamenta a XXXI EPROSOL 2026. <span class="obrigatorio">*</span></label>
    </div>
    <div class="erro-campo" id="erroAceiteTermos" style="margin-bottom:14px;">⚠ Você precisa aceitar os termos para enviar a inscrição.</div>

    <button type="submit" class="botao-enviar" id="botaoEnviar">Enviar inscrição</button>
    <div class="rodape-form">As inscrições ficam abertas de 08 a 11 de setembro de 2026.</div>
  </form>
</main>

<script>
/* ═══════════════════════════════════════════════════════════════
   MÁSCARAS
═══════════════════════════════════════════════════════════════ */
function mascaraCNPJ(v) {
  v = v.replace(/\D/g, '').substring(0, 14);
  if (v.length > 12) v = v.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
  else if (v.length > 8) v = v.replace(/^(\d{2})(\d{3})(\d{3})(\d{0,4})/, '$1.$2.$3/$4');
  else if (v.length > 5) v = v.replace(/^(\d{2})(\d{3})(\d{0,3})/, '$1.$2.$3');
  else if (v.length > 2) v = v.replace(/^(\d{2})(\d{0,3})/, '$1.$2');
  return v;
}

function mascaraCPF(v) {
  v = v.replace(/\D/g, '').substring(0, 11);
  if (v.length > 9) v = v.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})$/, '$1.$2.$3-$4');
  else if (v.length > 6) v = v.replace(/^(\d{3})(\d{3})(\d{0,3})/, '$1.$2.$3');
  else if (v.length > 3) v = v.replace(/^(\d{3})(\d{0,3})/, '$1.$2');
  return v;
}

function mascaraTelefone(v) {
  v = v.replace(/\D/g, '').substring(0, 11);
  if (v.length === 11) return v.replace(/^(\d{2})(\d{5})(\d{4})$/, '($1) $2-$3');
  if (v.length === 10) return v.replace(/^(\d{2})(\d{4})(\d{4})$/, '($1) $2-$3');
  if (v.length > 6)    return v.replace(/^(\d{2})(\d{4,5})(\d{0,4})/, '($1) $2-$3');
  if (v.length > 2)    return v.replace(/^(\d{2})(\d{0,5})/, '($1) $2');
  if (v.length > 0)    return v.replace(/^(\d{0,2})/, '($1');
  return v;
}

/* ═══════════════════════════════════════════════════════════════
   VALIDAÇÕES
═══════════════════════════════════════════════════════════════ */
function validarCNPJ(cnpj) {
  cnpj = cnpj.replace(/\D/g, '');
  return cnpj.length === 14;
}

function validarCPF(cpf) {
  cpf = cpf.replace(/\D/g, '');
  return cpf.length === 11;
}

function validarEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(email.trim());
}

function validarArquivo(input) {
  if (!input.files || input.files.length === 0) return false;
  var file = input.files[0];
  var ext = file.name.split('.').pop().toLowerCase();
  var allowedExt = ['pdf', 'jpg', 'jpeg', 'png'];
  if (allowedExt.indexOf(ext) === -1) return false;
  if (file.size > 3 * 1024 * 1024) return false;
  return true;
}

/* ═══════════════════════════════════════════════════════════════
   HELPERS DE ESTADO VISUAL
═══════════════════════════════════════════════════════════════ */
function marcarErro(inputEl, erroEl) {
  inputEl.classList.add('campo-invalido');
  inputEl.classList.remove('campo-valido');
  if (erroEl) erroEl.classList.add('visivel');
}

function marcarOk(inputEl, erroEl) {
  inputEl.classList.remove('campo-invalido');
  inputEl.classList.add('campo-valido');
  if (erroEl) erroEl.classList.remove('visivel');
}

function marcarErroUpload(wrapEl, erroEl) {
  wrapEl.classList.add('invalido');
  wrapEl.classList.remove('valido');
  if (erroEl) erroEl.classList.add('visivel');
}

function marcarOkUpload(wrapEl, erroEl) {
  wrapEl.classList.remove('invalido');
  wrapEl.classList.add('valido');
  if (erroEl) erroEl.classList.remove('visivel');
}

/* ═══════════════════════════════════════════════════════════════
   REFERÊNCIAS DOM
═══════════════════════════════════════════════════════════════ */
var fRazao      = document.getElementById('razaoSocial');
var fCnpj       = document.getElementById('cnpj');
var fNomeRep    = document.getElementById('nomeRepresentante');
var fCpf        = document.getElementById('cpfRepresentante');
var fTel        = document.getElementById('telefone');
var fEmail      = document.getElementById('email');
var fDocCnpj    = document.getElementById('docCnpj');
var fDocEndereco= document.getElementById('docComprovanteEndereco');
var fDocIdent   = document.getElementById('docIdentificacao');
var fDocProc    = document.getElementById('docProcuracao');
var fAceite     = document.getElementById('aceiteTermos');
var chkProcurador = document.getElementById('inscricaoPorProcurador');
var blocoProcurador = document.getElementById('blocoProcurador');
var rotuloDocIdent = document.getElementById('rotuloDocIdentificacao');

/* ═══════════════════════════════════════════════════════════════
   MÁSCARA – EVENTOS INPUT
   Nota: não manipulamos posição de cursor aqui pois o cálculo de
   offset fica incorreto quando separadores (. / -) são inseridos
   automaticamente. O cursor vai ao fim, que é o comportamento
   correto para preenchimento sequencial de máscara.
═══════════════════════════════════════════════════════════════ */
fCnpj.addEventListener('input', function() {
  var raw = this.value;
  this.value = mascaraCNPJ(raw);
});

fCpf.addEventListener('input', function() {
  this.value = mascaraCPF(this.value);
});

fTel.addEventListener('input', function() {
  this.value = mascaraTelefone(this.value);
});

/* ═══════════════════════════════════════════════════════════════
   VALIDAÇÃO INLINE (blur)
═══════════════════════════════════════════════════════════════ */
fRazao.addEventListener('blur', function() {
  if (this.value.trim() === '') marcarErro(this, document.getElementById('erroRazaoSocial'));
  else marcarOk(this, document.getElementById('erroRazaoSocial'));
});

fCnpj.addEventListener('blur', function() {
  if (!validarCNPJ(this.value)) marcarErro(this, document.getElementById('erroCnpj'));
  else marcarOk(this, document.getElementById('erroCnpj'));
});

fNomeRep.addEventListener('blur', function() {
  if (this.value.trim() === '') marcarErro(this, document.getElementById('erroNomeRepresentante'));
  else marcarOk(this, document.getElementById('erroNomeRepresentante'));
});

fCpf.addEventListener('blur', function() {
  if (!validarCPF(this.value)) marcarErro(this, document.getElementById('erroCpfRepresentante'));
  else marcarOk(this, document.getElementById('erroCpfRepresentante'));
});

fTel.addEventListener('blur', function() {
  var digits = this.value.replace(/\D/g,'');
  if (digits.length < 10) marcarErro(this, document.getElementById('erroTelefone'));
  else marcarOk(this, document.getElementById('erroTelefone'));
});

fEmail.addEventListener('blur', function() {
  if (!validarEmail(this.value)) marcarErro(this, document.getElementById('erroEmail'));
  else marcarOk(this, document.getElementById('erroEmail'));
});

fDocCnpj.addEventListener('change', function() {
  var wrap = document.getElementById('uploadDocCnpj');
  var erro = document.getElementById('erroDocCnpj');
  if (validarArquivo(this)) marcarOkUpload(wrap, erro);
  else marcarErroUpload(wrap, erro);
});

fDocEndereco.addEventListener('change', function() {
  var wrap = document.getElementById('uploadDocEndereco');
  var erro = document.getElementById('erroDocEndereco');
  if (validarArquivo(this)) marcarOkUpload(wrap, erro);
  else marcarErroUpload(wrap, erro);
});

fDocIdent.addEventListener('change', function() {
  var wrap = document.getElementById('uploadDocIdentificacao');
  var erro = document.getElementById('erroDocIdentificacao');
  if (validarArquivo(this)) marcarOkUpload(wrap, erro);
  else marcarErroUpload(wrap, erro);
});

fDocProc.addEventListener('change', function() {
  var wrap = document.getElementById('uploadDocProcuracao');
  var erro = document.getElementById('erroDocProcuracao');
  if (chkProcurador.checked) {
    if (validarArquivo(this)) marcarOkUpload(wrap, erro);
    else marcarErroUpload(wrap, erro);
  }
});

/* ═══════════════════════════════════════════════════════════════
   TOGGLE PROCURADOR
═══════════════════════════════════════════════════════════════ */
chkProcurador.addEventListener('change', function() {
  if (this.checked) {
    blocoProcurador.classList.add('ativo');
    fDocProc.setAttribute('required', 'required');
    // Atualiza label
    var firstText = rotuloDocIdent.childNodes[0];
    if (firstText && firstText.nodeType === 3) {
      firstText.textContent = 'Documento de identificação oficial com foto do procurador ';
    }
  } else {
    blocoProcurador.classList.remove('ativo');
    fDocProc.removeAttribute('required');
    fDocProc.value = '';
    var wrap = document.getElementById('uploadDocProcuracao');
    wrap.classList.remove('invalido','valido');
    document.getElementById('erroDocProcuracao').classList.remove('visivel');
    var firstText = rotuloDocIdent.childNodes[0];
    if (firstText && firstText.nodeType === 3) {
      firstText.textContent = 'Documento de identificação oficial com foto do representante legal ';
    }
  }
});

/* ═══════════════════════════════════════════════════════════════
   SUBMIT – VALIDAÇÃO COMPLETA
═══════════════════════════════════════════════════════════════ */
document.getElementById('formInscricao').addEventListener('submit', function(e) {
  var erros = [];

  // Razão social
  if (fRazao.value.trim() === '') {
    marcarErro(fRazao, document.getElementById('erroRazaoSocial'));
    erros.push('razão social');
  } else { marcarOk(fRazao, document.getElementById('erroRazaoSocial')); }

  // CNPJ
  if (!validarCNPJ(fCnpj.value)) {
    marcarErro(fCnpj, document.getElementById('erroCnpj'));
    erros.push('CNPJ');
  } else { marcarOk(fCnpj, document.getElementById('erroCnpj')); }

  // Nome representante
  if (fNomeRep.value.trim() === '') {
    marcarErro(fNomeRep, document.getElementById('erroNomeRepresentante'));
    erros.push('nome do representante');
  } else { marcarOk(fNomeRep, document.getElementById('erroNomeRepresentante')); }

  // CPF
  if (!validarCPF(fCpf.value)) {
    marcarErro(fCpf, document.getElementById('erroCpfRepresentante'));
    erros.push('CPF');
  } else { marcarOk(fCpf, document.getElementById('erroCpfRepresentante')); }

  // Telefone
  var telDigits = fTel.value.replace(/\D/g,'');
  if (telDigits.length < 10) {
    marcarErro(fTel, document.getElementById('erroTelefone'));
    erros.push('telefone');
  } else { marcarOk(fTel, document.getElementById('erroTelefone')); }

  // Email
  if (!validarEmail(fEmail.value)) {
    marcarErro(fEmail, document.getElementById('erroEmail'));
    erros.push('e-mail');
  } else { marcarOk(fEmail, document.getElementById('erroEmail')); }

  // Tamanho barraca
  var radios = document.querySelectorAll('input[name="tamanhoBarraca"]');
  var barraca = false;
  for (var i = 0; i < radios.length; i++) { if (radios[i].checked) { barraca = true; break; } }
  var erroBarraca = document.getElementById('erroTamanhoBarraca');
  if (!barraca) { erroBarraca.classList.add('visivel'); erros.push('tamanho da barraca'); }
  else { erroBarraca.classList.remove('visivel'); }

  // Doc CNPJ
  var wrapDocCnpj = document.getElementById('uploadDocCnpj');
  var erroDocCnpjEl = document.getElementById('erroDocCnpj');
  if (!validarArquivo(fDocCnpj)) { marcarErroUpload(wrapDocCnpj, erroDocCnpjEl); erros.push('comprovante CNPJ'); }
  else { marcarOkUpload(wrapDocCnpj, erroDocCnpjEl); }

  // Doc endereço
  var wrapDocEnd = document.getElementById('uploadDocEndereco');
  var erroDocEndEl = document.getElementById('erroDocEndereco');
  if (!validarArquivo(fDocEndereco)) { marcarErroUpload(wrapDocEnd, erroDocEndEl); erros.push('comprovante de endereço'); }
  else { marcarOkUpload(wrapDocEnd, erroDocEndEl); }

  // Doc identificação
  var wrapDocIdent = document.getElementById('uploadDocIdentificacao');
  var erroDocIdentEl = document.getElementById('erroDocIdentificacao');
  if (!validarArquivo(fDocIdent)) { marcarErroUpload(wrapDocIdent, erroDocIdentEl); erros.push('documento de identificação'); }
  else { marcarOkUpload(wrapDocIdent, erroDocIdentEl); }

  // Doc procuração (apenas se procurador marcado)
  if (chkProcurador.checked) {
    var wrapDocProc = document.getElementById('uploadDocProcuracao');
    var erroDocProcEl = document.getElementById('erroDocProcuracao');
    if (!validarArquivo(fDocProc)) { marcarErroUpload(wrapDocProc, erroDocProcEl); erros.push('procuração'); }
    else { marcarOkUpload(wrapDocProc, erroDocProcEl); }
  }

  // Aceite de termos
  var erroAceite = document.getElementById('erroAceiteTermos');
  if (!fAceite.checked) { erroAceite.classList.add('visivel'); erros.push('aceite dos termos'); }
  else { erroAceite.classList.remove('visivel'); }

  // Se há erros: bloqueia envio
  if (erros.length > 0) {
    e.preventDefault();
    var avisoGeral = document.getElementById('avisoGeral');
    document.getElementById('avisoGeralTexto').textContent =
      'Corrija ' + erros.length + ' campo(s) destacado(s) antes de enviar.';
    avisoGeral.classList.add('visivel');
    avisoGeral.scrollIntoView({ behavior: 'smooth', block: 'center' });
    return;
  }

  // Tudo ok – mostra spinner no botão
  var btn = document.getElementById('botaoEnviar');
  btn.disabled = true;
  btn.innerHTML = '<span class="spinner"></span>Enviando...';
});
</script>

</body>
</html>
