/* ============================================================
   EDUCARE — Faixa de assinatura (teste, carência e modo leitura)

   Uma faixa só, no topo de todas as telas, decidida pelo estado que o
   SERVIDOR calculou. O navegador não conta dia nenhum: dias_de_teste
   vem de educare_estado_assinatura, com o relógio do servidor.
   Adiantar a data da máquina não estende teste de ninguém.

   Modo leitura NÃO é modal que fecha nem página em branco. O app
   continua inteiro, navegável e legível; o que some é registrar coisa
   nova. Prender a profissional para fora do prontuário por causa de
   cobrança seria criar problema jurídico (dever de guarda, e LGPD
   art. 18) para resolver problema comercial.

   Por isso a faixa de modo leitura carrega os dois caminhos que
   importam: assinar e levar os dados embora. O botão de exportar fica
   ali de propósito, e não escondido em Configurações.

   Tom: 3 e 2 dias de teste são informação, não ameaça. Só o último dia
   tem urgência, porque aí a informação é de fato urgente. Faixa que
   grita desde o primeiro dia vira faixa que ninguém lê.
   ============================================================ */
(function () {
  const Icon = window.Icon;

  const dia = (d) => (d ? new Date(d).toLocaleDateString("pt-BR") : "");

  function Faixa({ tom, titulo, texto, acoes }) {
    return (
      <div
        className={"fx fx-" + tom}
        role={tom === "urgente" || tom === "leitura" ? "alert" : null}
      >
        <span className="fx-ic"><Icon name={tom === "leitura" ? "eye" : "sparkles"} size={19} /></span>
        <div className="fx-txt">
          <b>{titulo}</b>
          <span>{texto}</span>
        </div>
        <div className="fx-acoes">{acoes}</div>
      </div>
    );
  }

  function FaixaDeAssinatura({ onNavigate }) {
    const a = window.usarAssinatura();

    /* Antes de carregar não dá para afirmar nada, e uma faixa de modo
       leitura piscando para quem está em dia seria mentira com susto. */
    if (!a.carregado) return null;

    const verPlanos = () => onNavigate && onNavigate("planos");
    const botaoPlanos = (rotulo, classe) => (
      <button className={classe || "btn btn-sm fx-btn"} onClick={verPlanos}>
        <Icon name="sparkles" size={16} /> {rotulo}
      </button>
    );

    /* Aqui viviam as faixas do teste grátis — "faltam N dias" e "último
       dia". O teste saiu do produto: conta nova nasce bloqueada e só o
       pagamento libera, então 'trialing' não acontece mais. Quem não
       pagou cai na faixa de modo leitura, mais abaixo. */

    /* ---- pagamento falhou, dentro da carência ---- */
    if (a.status === "past_due") {
      return (
        <Faixa
          tom="urgente"
          titulo="Não conseguimos confirmar seu pagamento"
          texto={a.carenciaTerminaEm
            ? `Está tudo funcionando até ${dia(a.carenciaTerminaEm)}. Depois dessa data a conta entra em modo leitura.`
            : "Está tudo funcionando por enquanto. Regularize para a conta não entrar em modo leitura."}
          acoes={botaoPlanos("Resolver agora")}
        />
      );
    }

    /* ---- modo leitura ----
       O texto muda conforme o que terminou. Dizer "sua assinatura
       venceu" para quem nunca assinou é falso, e o contrário também.

       O ramo de quem não tem plano dizia "Seu teste terminou": sobrou do
       tempo em que existia teste grátis. Hoje conta sem plano é conta
       que ainda não pagou (ou que foi estornada), então a frase falava
       de um teste que ninguém fez. */
    if (!a.podeEscrever) {
      return (
        <Faixa
          tom="leitura"
          titulo="Modo leitura"
          texto={(a.plano ? "Sua assinatura venceu." : "Sua conta ainda não tem assinatura ativa.")
            + " Assine para voltar a registrar atendimentos e avaliações."
            + " Seus dados continuam aqui e podem ser exportados."}
          acoes={
            <>
              {botaoPlanos("Ver planos")}
              <window.BotaoExportar className="btn btn-sm fx-btn-ghost" />
            </>
          }
        />
      );
    }

    /* Assinatura em dia não merece faixa nenhuma. */
    return null;
  }

  window.FaixaDeAssinatura = FaixaDeAssinatura;
})();
