/**
 * <LinkGerado> — o segundo passo do convite e da reposição de password.
 *
 * Desde 10 Out o link segue por email (lib/email.js). O ecrã diz para onde foi, e o link continua à
 * mão, escondido, para quando o email cai no spam ou a pessoa está ao lado. Se o email não seguiu
 * (desligado, ou o servidor recusou), volta a ser o ecrã de antes: copia o link e envia-o tu.
 *
 * O que não muda: **o link só se vê uma vez.** O servidor guarda a impressão do token, não o token.
 */
function LinkGerado({ aberto, feito, tituloEnviado, assunto, aviso, nota, onFechar }) {
  const enviado = Boolean(feito.email_enviado);
  const [mostrar, setMostrar] = React.useState(!enviado);
  const [copiado, setCopiado] = React.useState(false);

  async function copiar() {
    try {
      await navigator.clipboard.writeText(feito.url);
      setCopiado(true);
      setTimeout(() => setCopiado(false), 2500);
    } catch {
      // Sem área de transferência: o link está à vista e selecciona-se à mão.
    }
  }

  return (
    <Modal
      aberto={aberto}
      onFechar={onFechar}
      titulo={enviado ? tituloEnviado : 'Copia o link'}
      acoes={
        <button
          type="button"
          onClick={onFechar}
          data-foco-inicial
          className="bg-primary px-4 py-2 text-sm uppercase tracking-wider text-primary-foreground outline-none hover:bg-primary/90 focus-visible:ring-1 focus-visible:ring-accent"
        >
          {enviado ? 'Fechar' : 'Já copiei'}
        </button>
      }
    >
      {enviado ? (
        <p className="text-sm text-foreground">
          Enviámos {assunto} para <span className="text-muted-foreground">{feito.email}</span>. O link caduca
          em sete dias e serve uma vez.
        </p>
      ) : (
        <>
          <p className="text-sm text-foreground">
            Envia este link a <span className="text-muted-foreground">{feito.email}</span>. Caduca em sete dias
            e serve uma vez.
          </p>
          {feito.email_motivo === 'falhou' && (
            <p role="alert" className="mt-2 border-l-2 border-primary bg-muted px-3 py-2 text-sm text-foreground">
              O email não seguiu: o servidor de email não aceitou o envio. Copia o link e envia-o tu.
            </p>
          )}
          <p className="mt-2 text-xs text-primary">
            Não volta a aparecer. Por segurança, o link não fica guardado em lado nenhum — {aviso}
          </p>
        </>
      )}

      {mostrar ? (
        <div className="mt-4 flex items-start gap-2 border border-border bg-muted px-3 py-2">
          <code className="grow break-all font-mono text-xs text-foreground">{feito.url}</code>
          <button
            type="button"
            onClick={copiar}
            className="shrink-0 border border-border px-2 py-1 text-xs text-muted-foreground transition-colors hover:border-primary hover:text-foreground"
          >
            {copiado ? 'Copiado' : 'Copiar'}
          </button>
        </div>
      ) : (
        <button
          type="button"
          onClick={() => setMostrar(true)}
          className="mt-4 text-xs text-muted-foreground underline underline-offset-2 hover:text-foreground"
        >
          Não chegou? Mostrar o link para o enviares tu
        </button>
      )}

      {nota && <p className="mt-4 text-xs text-muted-foreground">{nota}</p>}
    </Modal>
  );
}
