<?php
declare(strict_types=1);
session_start();

require_once __DIR__ . '/includes/db_connect.php';
$config = require __DIR__ . '/includes/config_mail.php';

require_once __DIR__ . '/includes/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/includes/PHPMailer/src/SMTP.php';
require_once __DIR__ . '/includes/PHPMailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
function site_url(string $path): string {
    $https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || (($_SERVER['SERVER_PORT'] ?? '80') === '443');
    $scheme = $https ? 'https' : 'http';
    $host   = $_SERVER['HTTP_HOST'] ?? 'localhost';
    return $scheme.'://'.$host.$path;
}

$prefill = strtolower(trim((string)($_GET['email'] ?? '')));
$msg = ''; $ok = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = strtolower(trim((string)($_POST['email'] ?? '')));
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $msg = 'Вкажіть коректний email.';
    } else {
        $q = "SELECT id, full_name, active FROM users WHERE email=? LIMIT 1";
        if ($st = $conn->prepare($q)) {
            $st->bind_param('s', $email);
            $st->execute(); $res = $st->get_result();
            $u = $res->fetch_assoc() ?: null; $st->close();

            if (!$u) {
                $msg = 'Користувача з таким email не знайдено.';
            } elseif ((int)$u['active'] === 1) {
                $msg = 'Акаунт вже активовано. Можете увійти.';
            } else {
                $code32 = bin2hex(random_bytes(16));
                $upd = $conn->prepare("UPDATE users SET activation_code=? WHERE id=?");
                $uid = (int)$u['id'];
                $upd->bind_param('si', $code32, $uid);
                if ($upd->execute()) {
                    $upd->close();

                    $mail = new PHPMailer(true);
                    try {
                        $mail->isSMTP();
                        $mail->Host       = $config['host'];
                        $mail->SMTPAuth   = true;
                        $mail->Username   = $config['username'];
                        $mail->Password   = $config['password'];
                        $mail->SMTPSecure = $config['encryption'];
                        $mail->Port       = (int)$config['port'];
                        $mail->CharSet    = 'UTF-8';

                        $mail->setFrom($config['username'], $config['from_name'] ?? 'Електронний журнал');
                        if (!empty($config['from_email']) && $config['from_email'] !== $config['username']) {
                            $mail->addReplyTo($config['from_email'], $config['from_name'] ?? 'Електронний журнал');
                        }

                        $mail->addAddress($email, (string)$u['full_name']);
                        $mail->Subject = 'Активація аккаунта — Електронний журнал';

                        $link = site_url('/activate.php?code=' . urlencode($code32));
                        $mail->isHTML(true);
                        $mail->Body = '<p>Вітаємо, '.h((string)$u['full_name']).'!</p>'
                                    . '<p>Щоб активувати обліковий запис, перейдіть за посиланням:<br>'
                                    . '<a href="'.h($link).'" target="_blank">'.h($link).'</a></p>';
                        $mail->AltBody = "Вітаємо, {$u['full_name']}!\n\nДля активації перейдіть за посиланням:\n{$link}\n";

                        if ($mail->send()) { $ok = true; $msg = 'Лист повторно надіслано. Перевірте пошту (включно зі «Спам»).'; }
                        else { $msg = 'Не вдалося відправити лист зараз. Спробуйте пізніше.'; }
                    } catch (Exception $e) {
                        error_log('PHPMailer error (resend): ' . $mail->ErrorInfo);
                        $msg = 'Не вдалося відправити лист зараз. Спробуйте пізніше.';
                    }
                } else {
                    $upd->close();
                    $msg = 'Тимчасова помилка. Спробуйте пізніше.';
                }
            }
        } else {
            $msg = 'Тимчасова помилка. Спробуйте пізніше.';
        }
    }
}
?>
<!doctype html>
<html lang="uk">
<head>
  <meta charset="utf-8">
  <title>Надіслати активацію ще раз</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <style>
    body{font-family:Arial,sans-serif;background:#f4f4f4;margin:0}
    .wrap{max-width:650px;margin:24px auto;background:#fff;border-radius:12px;padding:18px;box-shadow:0 6px 18px rgba(0,0,0,.08)}
    .ok{color:#16a34a;font-weight:800}
    .err{color:#b00020;font-weight:800}
    label{font-weight:700}
    input,button{padding:10px;border:1px solid #d1d5db;border-radius:10px}
    input{width:100%;max-width:420px}
    button{background:#2563eb;color:#fff;font-weight:800;border:none;border-radius:10px}
    a{color:#2563eb;text-decoration:none}
  </style>
</head>
<body>
  <div class="wrap">
    <h1>Надіслати посилання для активації ще раз</h1>
    <?php if ($msg): ?>
      <p class="<?= $ok ? 'ok' : 'err' ?>"><?= h($msg) ?></p>
    <?php endif; ?>
    <form method="post" action="">
      <label for="email">Ваш email</label><br>
      <input type="email" id="email" name="email" value="<?= h($prefill) ?>" required>
      <br><br>
      <button type="submit">Надіслати</button>
    </form>
    <p style="margin-top:10px"><a href="/index.php">На головну</a></p>
  </div>
</body>
</html>
