// LGPD — Banner de cookies + páginas legais (Política e Termos)

const COOKIE_STORAGE_KEY = "ikigai_cookie_consent_v1";

const COOKIE_CATEGORIES = [
  {
    id: "essenciais",
    nome: "Essenciais",
    desc: "Necessários para o funcionamento básico do site (sessão de login, preferências de idioma). Não podem ser desativados.",
    locked: true, defaultOn: true,
  },
  {
    id: "analytics",
    nome: "Análise e desempenho",
    desc: "Nos ajudam a entender como você usa o site (páginas visitadas, tempo gasto) para melhorar a experiência. Dados anônimos e agregados.",
    locked: false, defaultOn: false,
  },
  {
    id: "marketing",
    nome: "Marketing",
    desc: "Permitem mostrar anúncios e conteúdo relevantes em outros sites e medir a eficácia das nossas campanhas.",
    locked: false, defaultOn: false,
  },
];

function lerConsentimento() {
  try { return JSON.parse(localStorage.getItem(COOKIE_STORAGE_KEY)); }
  catch { return null; }
}
function salvarConsentimento(prefs) {
  const data = { ...prefs, essenciais: true, decididoEm: new Date().toISOString(), versao: 1 };
  localStorage.setItem(COOKIE_STORAGE_KEY, JSON.stringify(data));
  window.dispatchEvent(new CustomEvent("ikigai-consent-changed", { detail: data }));
  return data;
}
function temConsentimento() {
  return !!lerConsentimento();
}

function CookieBanner({ onOpenDoc }) {
  const [consent, setConsent] = React.useState(lerConsentimento());
  const [showCategorias, setShowCategorias] = React.useState(false);
  const [prefs, setPrefs] = React.useState(
    () => COOKIE_CATEGORIES.reduce((acc, c) => ({ ...acc, [c.id]: c.defaultOn }), {})
  );

  React.useEffect(() => {
    const handler = () => setConsent(lerConsentimento());
    window.addEventListener("ikigai-open-cookies", () => setConsent(null));
    window.addEventListener("ikigai-consent-changed", handler);
    return () => {
      window.removeEventListener("ikigai-consent-changed", handler);
    };
  }, []);

  if (consent) return null;

  const aceitarTodos = () => {
    setConsent(salvarConsentimento({ essenciais: true, analytics: true, marketing: true }));
  };
  const apenasEssenciais = () => {
    setConsent(salvarConsentimento({ essenciais: true, analytics: false, marketing: false }));
  };
  const salvarSelecionados = () => {
    setConsent(salvarConsentimento({ ...prefs, essenciais: true }));
    setShowCategorias(false);
  };

  return (
    <>
      <div className="lgpd-banner" role="dialog" aria-labelledby="lgpd-banner-h">
        <h3 id="lgpd-banner-h">Sua privacidade é importante para nós</h3>
        <p>
          Utilizamos cookies e tecnologias semelhantes para garantir o funcionamento adequado do site, analisar o tráfego, personalizar conteúdo e oferecer publicidade relevante. Ao clicar em "Aceitar todos", você concorda com o uso de todos os cookies. Você pode gerenciar suas preferências a qualquer momento clicando em "Personalizar". Para mais informações, consulte nossa{" "}
          <a onClick={(e) => { e.preventDefault(); onOpenDoc("privacidade"); }} href="#">Política de Privacidade</a>.
        </p>
        <div className="lgpd-banner-row">
          <span className="grow"></span>
          <button className="lgpd-btn lgpd-btn-ghost" onClick={() => setShowCategorias(true)}>Personalizar</button>
          <button className="lgpd-btn lgpd-btn-light" onClick={apenasEssenciais}>Apenas essenciais</button>
          <button className="lgpd-btn lgpd-btn-primary" onClick={aceitarTodos}>Aceitar todos</button>
        </div>
      </div>

      {showCategorias && (
        <div className="lgpd-modal-bg" onClick={() => setShowCategorias(false)}>
          <div className="lgpd-modal" onClick={(e) => e.stopPropagation()}>
            <div className="lgpd-modal-h">
              <h3>Preferências de cookies</h3>
              <p>Ative apenas as categorias com as quais você concorda. Você pode mudar isso quando quiser.</p>
            </div>
            <div className="lgpd-modal-body">
              {COOKIE_CATEGORIES.map((c) => {
                const ligado = c.locked ? true : prefs[c.id];
                return (
                  <div key={c.id} className="lgpd-cat">
                    <div className="lgpd-cat-h">
                      <h4>{c.nome}</h4>
                      {c.locked
                        ? <span className="lock">Sempre ativo</span>
                        : <div className={`lgpd-switch ${ligado ? "is-on" : ""}`} onClick={() => setPrefs({ ...prefs, [c.id]: !ligado })} role="switch" aria-checked={ligado}></div>}
                    </div>
                    <p>{c.desc}</p>
                  </div>
                );
              })}
            </div>
            <div className="lgpd-modal-foot">
              <button className="lgpd-btn lgpd-btn-ghost" onClick={() => setShowCategorias(false)}>Cancelar</button>
              <button className="lgpd-btn lgpd-btn-primary" onClick={salvarSelecionados}>Salvar preferências</button>
            </div>
          </div>
        </div>
      )}
    </>
  );
}

function PoliticaPrivacidade({ onClose }) {
  return (
    <div className="lgpd-doc">
      <button className="lgpd-doc-close" onClick={onClose}>‹ Fechar</button>
      <div className="lgpd-doc-inner">
        <h1>Política de Privacidade</h1>
        <p className="updated">Última atualização · 16 de maio de 2026</p>

        <p>
          O <strong>Dojô Ikigai</strong> (CNPJ XXXXXXXXXX), com sede na <strong>Estr. Mirandela, 1222 sb, Nilópolis – RJ, 26520-090</strong>, está comprometido com a privacidade e a proteção de dados pessoais de seus sócios, alunos e visitantes, em conformidade com a <strong>Lei Geral de Proteção de Dados (Lei nº 13.709/2018)</strong>.
        </p>

        <h2>1. Quem é o Controlador dos dados?</h2>
        <p>
          O Controlador dos dados pessoais tratados nesta plataforma é o Dojô Ikigai. Para dúvidas, exercício de direitos ou denúncias, entre em contato com o nosso <strong>Encarregado de Dados (DPO)</strong>:
        </p>
        <div className="lgpd-callout">
          <p><strong>E-mail:</strong> dojo@ikigai.com.br</p>
          <p><strong>WhatsApp:</strong> (21) 99608-7003</p>
        </div>

        <h2>2. Quais dados coletamos?</h2>
        <h3>Dados de cadastro</h3>
        <ul>
          <li>Nome completo, e-mail, telefone, data de nascimento, CPF</li>
          <li>Endereço (cidade) e contato de emergência</li>
          <li>Foto do perfil (opcional)</li>
        </ul>
        <h3>Dados de prática</h3>
        <ul>
          <li>Graduação atual e histórico de faixas</li>
          <li>Frequência nas aulas (presenças e faltas)</li>
          <li>Respostas do questionário de prontidão física (PAR-Q)</li>
          <li>Inscrições em eventos e exames</li>
        </ul>
        <h3>Dados financeiros</h3>
        <ul>
          <li>Histórico de mensalidades pagas e em aberto</li>
        </ul>
        <h3>Dados técnicos</h3>
        <ul>
          <li>Endereço IP, navegador e dispositivo</li>
          <li>Datas e horários de acesso ao sistema</li>
          <li>Cookies (conforme suas preferências)</li>
        </ul>

        <h2>3. Para que usamos seus dados?</h2>
        <ul>
          <li><strong>Execução do contrato</strong> — gerenciar matrícula, aulas, presenças e mensalidades</li>
          <li><strong>Obrigação legal</strong> — emissão de notas, declarações e cumprimento de exigências fiscais</li>
          <li><strong>Legítimo interesse</strong> — segurança da rede, prevenção de fraudes e melhoria do site</li>
          <li><strong>Consentimento</strong> — envio de comunicações de marketing, fotos em redes sociais</li>
          <li><strong>Tutela da saúde</strong> — questionário de prontidão (PAR-Q) antes do início da prática</li>
        </ul>

        <h2>4. Compartilhamento de dados</h2>
        <p>Compartilhamos seus dados apenas com:</p>
        <ul>
          <li><strong>SKIBRASIL</strong> — federação à qual somos filiados, para registro de graduações</li>
          <li><strong>Provedores de serviço</strong> — hospedagem (Railway), e-mail (Resend), pagamento (Mercado Pago/Asaas), todos com contratos de tratamento de dados</li>
          <li><strong>Autoridades públicas</strong> — quando exigido por lei ou ordem judicial</li>
        </ul>
        <p>Não vendemos seus dados a terceiros. Em hipótese alguma.</p>

        <h2>5. Por quanto tempo guardamos seus dados?</h2>
        <ul>
          <li>Dados de cadastro: enquanto você for sócio ativo, e por mais 5 anos após o encerramento (prazo civil)</li>
          <li>Dados financeiros: 10 anos (exigência fiscal)</li>
          <li>Dados do questionário PAR-Q: enquanto você for sócio ativo</li>
          <li>Logs de acesso: 6 meses (Marco Civil da Internet)</li>
        </ul>

        <h2>6. Seus direitos como titular</h2>
        <p>A LGPD garante a você, a qualquer tempo, os seguintes direitos:</p>
        <ul>
          <li><strong>Confirmação e acesso</strong> — saber se tratamos seus dados e obter cópia</li>
          <li><strong>Correção</strong> — pedir correção de dados incompletos ou desatualizados</li>
          <li><strong>Anonimização ou eliminação</strong> — pedir a exclusão de dados desnecessários</li>
          <li><strong>Portabilidade</strong> — receber seus dados em formato estruturado</li>
          <li><strong>Revogação do consentimento</strong> — desautorizar usos baseados em consentimento</li>
          <li><strong>Oposição</strong> — opor-se a tratamentos que considere indevidos</li>
          <li><strong>Reclamação à ANPD</strong> — denunciar à Autoridade Nacional de Proteção de Dados</li>
        </ul>
        <p>Para exercer qualquer direito, acesse a área <strong>Privacidade e Meus Dados</strong> na sua conta de sócio, ou contate o DPO pelos canais acima.</p>

        <h2>7. Segurança</h2>
        <p>Aplicamos medidas técnicas e administrativas para proteger seus dados:</p>
        <ul>
          <li>Senhas armazenadas com hash bcrypt (custo 12)</li>
          <li>Comunicação criptografada (HTTPS/TLS)</li>
          <li>Autenticação em 2 fatores disponível para todos os usuários</li>
          <li>Acesso restrito por permissões granulares (funcionários só veem o que precisam)</li>
          <li>Backups diários do banco de dados</li>
          <li>Auditoria de acessos sensíveis registrada</li>
        </ul>

        <h2>8. Cookies</h2>
        <p>Usamos três categorias de cookies:</p>
        <ul>
          <li><strong>Essenciais</strong> — necessários para o site funcionar (sessão de login, preferências). Não exigem consentimento.</li>
          <li><strong>Análise</strong> — ajudam a entender como você usa o site, sem identificar você pessoalmente.</li>
          <li><strong>Marketing</strong> — permitem mostrar anúncios relevantes em outros sites.</li>
        </ul>
        <p>Você pode revisar suas preferências a qualquer momento através do banner inferior do site.</p>

        <h2>9. Crianças e adolescentes</h2>
        <p>
          Para sócios menores de 18 anos, exigimos consentimento expresso dos pais ou responsáveis legais no momento da matrícula. Não tratamos dados de menores de 14 anos como sócios — a idade mínima para treino é 14 anos.
        </p>

        <h2>10. Alterações nesta política</h2>
        <p>
          Esta política pode ser atualizada. Quando houver mudanças relevantes, avisaremos por e-mail e exigiremos novo aceite no primeiro acesso após a mudança.
        </p>
      </div>
    </div>
  );
}

function TermosUso({ onClose }) {
  return (
    <div className="lgpd-doc">
      <button className="lgpd-doc-close" onClick={onClose}>‹ Fechar</button>
      <div className="lgpd-doc-inner">
        <h1>Termos de Uso</h1>
        <p className="updated">Última atualização · 16 de maio de 2026</p>

        <p>
          Estes Termos regem o uso da plataforma do <strong>Dojô Ikigai</strong> (CNPJ XXXXXXXXXX). Ao se cadastrar e usar nossos serviços, você concorda integralmente com o aqui disposto.
        </p>

        <h2>1. Quem pode se cadastrar</h2>
        <ul>
          <li>Pessoas com idade mínima de 14 anos</li>
          <li>Menores de 18 anos precisam de autorização do responsável legal</li>
          <li>Você deve fornecer dados verdadeiros e atualizados</li>
        </ul>

        <h2>2. Sua conta</h2>
        <ul>
          <li>Você é o único responsável pela guarda da sua senha</li>
          <li>Recomendamos fortemente ativar a autenticação em 2 fatores (2FA)</li>
          <li>Notifique imediatamente o dojô em caso de acesso não autorizado</li>
          <li>Não compartilhe sua conta com terceiros</li>
        </ul>

        <h2>3. Mensalidades e pagamentos</h2>
        <ul>
          <li>Mensalidade com vencimento todo dia 10</li>
          <li>Atraso superior a 30 dias suspende o acesso às aulas até regularização</li>
          <li>Cancelamento da matrícula deve ser solicitado por escrito até o dia 5 do mês</li>
          <li>Não há reembolso de mensalidades já pagas</li>
        </ul>

        <h2>4. Conduta no dojô</h2>
        <p>
          O Dojô Ikigai segue a tradição do Karatê Shotokan e a etiqueta do <em>Reishiki</em>. Espera-se de todos os sócios:
        </p>
        <ul>
          <li>Respeito ao Sensei, instrutores, colegas e ao tatame</li>
          <li>Uso adequado do kimono (gi) limpo e em bom estado</li>
          <li>Higiene pessoal e cuidado com a integridade do dojô</li>
          <li>Comportamento ético dentro e fora das aulas</li>
        </ul>
        <p>Condutas inadequadas podem resultar em advertência, suspensão ou desligamento, conforme análise do Sensei.</p>

        <h2>5. Direito de imagem</h2>
        <p>
          Eventualmente fazemos fotos e vídeos durante aulas, exames e eventos. Ao se matricular, você pode autorizar ou recusar o uso da sua imagem nos nossos materiais. Você pode mudar essa decisão a qualquer momento na área <strong>Privacidade</strong> da sua conta.
        </p>

        <h2>6. Propriedade intelectual</h2>
        <p>
          Todo o conteúdo do site (textos, imagens, vídeos, materiais didáticos) pertence ao Dojô Ikigai ou aos seus respectivos autores. Você pode usá-lo para fins pessoais de estudo, mas não pode redistribuir comercialmente.
        </p>

        <h2>7. Limitação de responsabilidade</h2>
        <p>
          A prática de karatê envolve risco físico. Ao se matricular, você declara estar ciente e em condições de praticá-lo, conforme o questionário PAR-Q. O Dojô Ikigai não se responsabiliza por lesões decorrentes de:
        </p>
        <ul>
          <li>Omissão ou falsidade nas respostas do questionário de prontidão</li>
          <li>Descumprimento de instruções do Sensei</li>
          <li>Condições preexistentes de saúde não declaradas</li>
        </ul>

        <h2>8. Lei aplicável e foro</h2>
        <p>
          Estes Termos são regidos pela legislação brasileira. Fica eleito o foro da Comarca de Nilópolis – RJ para dirimir qualquer controvérsia.
        </p>

        <h2>9. Aceite</h2>
        <p>
          Ao marcar "Li e concordo com os termos" no cadastro, você declara ter lido, entendido e aceito integralmente este documento e a Política de Privacidade. Em caso de discordância, não complete o cadastro.
        </p>
      </div>
    </div>
  );
}

// Documento atalho do controller — abre overlay
function LegalDoc({ kind, onClose }) {
  if (kind === "privacidade") return <PoliticaPrivacidade onClose={onClose} />;
  if (kind === "termos") return <TermosUso onClose={onClose} />;
  return null;
}

Object.assign(window, {
  CookieBanner, PoliticaPrivacidade, TermosUso, LegalDoc,
  lerConsentimento, salvarConsentimento, temConsentimento,
  COOKIE_CATEGORIES,
});
