Redirecionando...

<script>
(function(){
  // === PATHS ===
  const PATH_GENERATOR  = "/pages/gerador-de-token";
  const PATH_UPSELL     = "/pages/pos-compra-exclusivo"; // "upsell"
  const PATH_COMUNIDADE = "/pages/pos-compra-exclusivo";

  // Rode SOMENTE na página geradora
  if (location.pathname.replace(/\/+$/,'') !== PATH_GENERATOR) return;

  // --- helper: mostra mensagem e redireciona ---
  function redirectWithMessage(url){
    const add = () => {
      try {
        const el = document.createElement('div');
        el.textContent = "Redirecionando...";
        el.setAttribute('aria-live','polite');
        el.style.cssText = "position:fixed;inset:0;display:flex;align-items:center;justify-content:center;font-family:Montserrat,Arial,sans-serif;font-weight:600;font-size:18px;color:#111;background:rgba(255,255,255,.92);z-index:2147483647;pointer-events:none;";
        document.body.appendChild(el);
      } catch(_) {}
    };
    if (document.body) add();
    else {
      const onReady = () => {
        if (document.readyState !== 'loading') {
          document.removeEventListener('readystatechange', onReady);
          add();
        }
      };
      document.addEventListener('readystatechange', onReady);
    }
    setTimeout(() => { location.replace(url); }, 100);
  }

  // === TZ helpers (sem parse frágil de string) ===
  const TZ = "America/Sao_Paulo";
  const BRT_UTC_HOUR = 3; // 00:00 SP ~= 03:00 UTC (sem DST)

  function nowPartsTZ(){
    const p = new Intl.DateTimeFormat('en-US',{
      timeZone: TZ, year:'numeric', month:'2-digit', day:'2-digit',
      hour:'2-digit', minute:'2-digit', second:'2-digit', hour12:false
    }).formatToParts(new Date()).reduce((a,b)=>(a[b.type]=b.value, a),{});
    return { year:+p.year, month:+p.month, day:+p.day, hour:+p.hour, minute:+p.minute };
  }
  function weekdayIndexTZ(){
    const map = {Sun:0, Mon:1, Tue:2, Wed:3, Thu:4, Fri:5, Sat:6};
    return map[new Intl.DateTimeFormat('en-US',{ timeZone: TZ, weekday:'short'}).format(new Date())];
  }
  function dentroDaJanela(day, hour, minute){
    const minutesToday = hour*60 + minute;
    const startMin = 11*60; // 11:00
    if (day >= 1 && day <= 4) return minutesToday >= startMin; // Seg–Qui 10:30–23:59
    if (day === 5)            return minutesToday >= startMin; // Sex 10:30 em diante
    if (day === 6 || day === 0) return true;                   // Sáb/Dom liberado
    return false;
  }

  // Leitura de token e estados
  function lerToken(){
    try { return JSON.parse(localStorage.getItem("acessoToken") || "{}"); }
    catch { return {}; }
  }
  function tokenValido(tok){ return !!tok.validade && Date.now() <= +tok.validade; }
  function tokenExpirado(tok){ return !!tok.validade && Date.now() > +tok.validade; }

  // Verifica se há lock ativo (trava pós-expiração de 20 dias)
  function lockAtivo(tok){
    return !!tok.lockUntil && Date.now() <= +tok.lockUntil;
  }

  // Calcula validade (próx. 00:00 SP, ou 2ª 00:00 se sexta)
  function calcValidadeTs(parts, day){
    const addDays = (day === 5) ? 3 : 1;
    return Date.UTC(parts.year, parts.month-1, parts.day + addDays, BRT_UTC_HOUR, 0, 0);
  }

  const parts = nowPartsTZ();
  const day   = weekdayIndexTZ();
  const tok   = lerToken();

  // --- NOVA REGRA SOLICITADA ---
  if (tokenValido(tok)) {
    // Tem token válido -> manda direto para o upsell
    redirectWithMessage(PATH_UPSELL);
    return;
  }
  if (tokenExpirado(tok)) {
    // Tem token, mas expirado -> vai para a comunidade
    redirectWithMessage(PATH_COMUNIDADE);
    return;
  }

  // --- Fluxo original de geração (sem token OU expirado porém fora do lock de 20 dias) ---
  if (lockAtivo(tok)) {
    // Travado: não gera novo token durante o período de lock
    redirectWithMessage(PATH_COMUNIDADE);
    return;
  }

  if (!dentroDaJanela(day, parts.hour, parts.minute)) {
    // Fora do horário: sem geração
    redirectWithMessage(PATH_COMUNIDADE);
    return;
  }

  // No horário e sem lock -> gera token e define nova janela de lock (+20 dias após expiração)
  const validade   = calcValidadeTs(parts, day);
  const lockUntil  = Date.UTC(parts.year, parts.month-1, parts.day + ((day===5)?3:1) + 20, BRT_UTC_HOUR, 0, 0); // expira + 20 dias

  try {
    localStorage.setItem("acessoToken", JSON.stringify({
      timestamp: Date.now(),
      validade,
      lockUntil
    }));
  } catch(_) { /* se storage falhar, o acesso não persistirá */ }

  // Vai para o upsell
  redirectWithMessage(PATH_UPSELL);
})();
</script>