<?php
// app/license_middleware.php
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/db.php';

function ensure_active_license_or_redirect(): void {
  // precisa ter sessão e ao menos email OU id
  $sess = $_SESSION['user'] ?? null;
  if (!$sess || (empty($sess['email']) && empty($sess['id']))) {
    header('Location: ' . BASE_URL . 'login.php'); exit;
  }

  $id    = $sess['id']    ?? null;
  $email = $sess['email'] ?? null;

  $pdo = db();

  // 1) tenta por ID
  $u = null;
  if (!empty($id)) {
    $q1 = $pdo->prepare("
      SELECT contratado_em, expira_em
      FROM public.auth_users
      WHERE id = :id
      LIMIT 1
    ");
    $q1->execute([':id' => $id]);
    $u = $q1->fetch();
  }

  // 2) fallback por e-mail (se não achou por id, ou id ausente)
  if (!$u && !empty($email)) {
    $q2 = $pdo->prepare("
      SELECT contratado_em, expira_em
      FROM public.auth_users
      WHERE lower(email) = lower(:email)
      LIMIT 1
    ");
    $q2->execute([':email' => $email]);
    $u = $q2->fetch();
  }

  $err = null;
  if (!$u) {
    $err = 'Licença não localizada.';
  } else {
    try {
      $now = new DateTimeImmutable('now');
      $ini = new DateTimeImmutable($u['contratado_em']);
      $fim = new DateTimeImmutable($u['expira_em']);

      if ($now < $ini)     $err = 'Sua licença ainda não está ativa. Início: '.$ini->format('d/m/Y H:i');
      elseif ($now > $fim) $err = 'Sua licença expirou em '.$fim->format('d/m/Y H:i');
    } catch (Throwable $e) {
      $err = 'Falha ao validar licença.';
    }
  }

  if ($err) {
    $msg = $err.' <a href="'.htmlspecialchars(RENEW_URL, ENT_QUOTES, 'UTF-8').'" target="_blank" rel="noopener" style="color:#60a5fa">Renovar licença</a>';
    $logoutUrl = BASE_URL . 'logout.php?msg=' . urlencode($msg);
    if (!headers_sent()) header('Location: ' . $logoutUrl);
    else echo '<script>location.href='.json_encode($logoutUrl).'</script>';
    exit;
  }
}
