<?php
declare(strict_types=1);

/**
 * /profile/setting/notifications.php
 * Відповідає за:
 * - сторінку налаштувань email-сповіщень
 * - збереження user_notification_settings
 * - master switch + окремі типи сповіщень
 */

require_once __DIR__ . '/../../includes/start.php';
require_once __DIR__ . '/../../functional/notifications/_lib.php';
require_login();

$pdo = db();
$me  = current_user();
$userId = (int)($me['id'] ?? 0);

if (!function_exists('h')) {
    function h(?string $s): string
    {
        return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
    }
}

if (!function_exists('ntf_page_redirect')) {
    function ntf_page_redirect(string $to): never
    {
        header('Location: ' . $to, true, 303);
        exit;
    }
}

if (!function_exists('ntf_page_csrf_value')) {
    function ntf_page_csrf_value(): string
    {
        $t = trim((string)($_POST['csrf'] ?? ''));
        if ($t === '') $t = trim((string)($_POST['csrf_token'] ?? ''));
        return $t;
    }
}

if (!function_exists('ntf_page_csrf_ok')) {
    function ntf_page_csrf_ok(string $token): bool
    {
        if ($token === '') return false;

        if (function_exists('csrf_check')) {
            try {
                return (bool)csrf_check($token);
            } catch (Throwable $e) {
            }
        }

        if (session_status() !== PHP_SESSION_ACTIVE) @session_start();
        $sess = (string)($_SESSION['_csrf'] ?? ($_SESSION['csrf_token'] ?? ''));
        if ($sess === '') return false;

        return function_exists('hash_equals') ? hash_equals($sess, $token) : ($sess === $token);
    }
}

if (!function_exists('ntf_page_flash_set')) {
    function ntf_page_flash_set(string $key, string $msg): void
    {
        if (!isset($_SESSION['flash']) || !is_array($_SESSION['flash'])) {
            $_SESSION['flash'] = [];
        }
        $_SESSION['flash'][$key] = $msg;

        if (!isset($_SESSION['_flash']) || !is_array($_SESSION['_flash'])) {
            $_SESSION['_flash'] = [];
        }
        $_SESSION['_flash'][$key] = $msg;
    }
}

$lang = (string)($_SESSION['lang'] ?? ($me['lang'] ?? 'uk'));
if (!in_array($lang, ['uk','ru','en'], true)) $lang = 'uk';

$T = function(string $uk, string $ru, string $en) use ($lang): string {
    return match ($lang) {
        'ru' => $ru,
        'en' => $en,
        default => $uk,
    };
};

$title = $T('Email-сповіщення', 'Email-уведомления', 'Email notifications');
$seo_noindex = true;
$canonical = function_exists('abs_url') ? abs_url('/profile/setting/notifications.php') : '/profile/setting/notifications.php';

if (!headers_sent()) {
    header('X-Robots-Tag: noindex, nofollow, noarchive, nosnippet', true);
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0', true);
}

if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
    $csrf = ntf_page_csrf_value();

    if (!ntf_page_csrf_ok($csrf)) {
        ntf_page_flash_set('err', $T(
            'Помилка безпеки (CSRF). Оновіть сторінку і спробуйте ще раз.',
            'Ошибка безопасности (CSRF). Обновите страницу и попробуйте снова.',
            'Security error (CSRF). Refresh the page and try again.'
        ));
        ntf_page_redirect('/profile/setting/notifications.php');
    }

    $ok = ntf_preferences_save($pdo, $userId, [
        'email_enabled'            => isset($_POST['email_enabled']) ? 1 : 0,
        'email_private_message'    => isset($_POST['email_private_message']) ? 1 : 0,
        'email_friend_request'     => isset($_POST['email_friend_request']) ? 1 : 0,
        'email_group_invite'       => isset($_POST['email_group_invite']) ? 1 : 0,
        'email_group_join_request' => isset($_POST['email_group_join_request']) ? 1 : 0,
        'email_comment_reply'      => isset($_POST['email_comment_reply']) ? 1 : 0,
        'email_post_comment'       => isset($_POST['email_post_comment']) ? 1 : 0,
    ]);

    if ($ok) {
        ntf_page_flash_set('ok', $T(
            'Налаштування сповіщень збережено ✅',
            'Настройки уведомлений сохранены ✅',
            'Notification settings saved ✅'
        ));
    } else {
        ntf_page_flash_set('err', $T(
            'Не вдалося зберегти налаштування. Перевірте, чи виконана SQL-міграція.',
            'Не удалось сохранить настройки. Проверьте, выполнена ли SQL-миграция.',
            'Failed to save settings. Check whether the SQL migration was applied.'
        ));
    }

    ntf_page_redirect('/profile/setting/notifications.php');
}

$prefs = ntf_preferences_get($pdo, $userId);
$csrfField = function_exists('csrf_field')
    ? (string)csrf_field()
    : '<input type="hidden" name="csrf" value="' . h((string)($_SESSION['_csrf'] ?? ($_SESSION['csrf_token'] ?? ''))) . '">';

require __DIR__ . '/../../includes/header.php';
?>

<div class="feed-layout">
  <aside>
    <div class="sidebar-sticky">
      <?php require __DIR__ . '/../../blocks/profile.php'; ?>
    </div>
  </aside>

  <section>
    <div class="card card-app p-3 mb-3">
      <div class="d-flex align-items-center justify-content-between gap-2 flex-wrap">
        <div>
          <div class="fw-semibold fs-5"><?= h($title) ?></div>
          <div class="text-muted small">
            <?= h($T(
              'Листи про важливі дії у вашому акаунті. Лайки та дизлайки тут не відправляються.',
              'Письма о важных действиях в вашем аккаунте. Лайки и дизлайки здесь не отправляются.',
              'Emails about important actions in your account. Likes and dislikes are not sent here.'
            )) ?>
          </div>
        </div>

        <div class="d-flex gap-2">
          <a class="btn btn-sm btn-outline-secondary" href="/profile/setting/index.php">
            <?= h($T('До налаштувань', 'К настройкам', 'Back to settings')) ?>
          </a>
          <a class="btn btn-sm btn-outline-secondary" href="/profile/?u=<?= rawurlencode((string)($me['username'] ?? '')) ?>">
            <?= h($T('Назад у профіль', 'Назад в профиль', 'Back to profile')) ?>
          </a>
        </div>
      </div>
    </div>

    <div class="card card-app p-3">
      <form method="post">
        <?= $csrfField ?>

        <div class="form-check form-switch mb-3">
          <input class="form-check-input" type="checkbox" id="email_enabled" name="email_enabled" value="1" <?= ((int)$prefs['email_enabled'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label fw-semibold" for="email_enabled">
            <?= h($T('Увімкнути email-сповіщення', 'Включить email-уведомления', 'Enable email notifications')) ?>
          </label>
        </div>

        <div class="text-muted small mb-3">
          <?= h($T(
            'Пошта для відправки: ',
            'Почта для отправки: ',
            'Delivery email: '
          )) ?><?= h((string)($me['email'] ?? '')) ?>
        </div>

        <hr class="my-3">

        <div class="form-check mb-3">
          <input class="form-check-input" type="checkbox" id="email_private_message" name="email_private_message" value="1" <?= ((int)$prefs['email_private_message'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_private_message">
            <span class="fw-semibold"><?= h($T('Нове приватне повідомлення', 'Новое личное сообщение', 'New private message')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист приходить тільки на перше нове непрочитане повідомлення у хвилі діалогу, без спаму на кожну репліку.',
              'Письмо приходит только на первое новое непрочитанное сообщение в волне диалога, без спама на каждую реплику.',
              'Email is sent only for the first new unread message in a conversation burst, not for every reply.'
            )) ?></span>
          </label>
        </div>

        <div class="form-check mb-3">
          <input class="form-check-input" type="checkbox" id="email_friend_request" name="email_friend_request" value="1" <?= ((int)$prefs['email_friend_request'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_friend_request">
            <span class="fw-semibold"><?= h($T('Запит у друзі', 'Заявка в друзья', 'Friend request')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист про нову заявку в друзі.',
              'Письмо о новой заявке в друзья.',
              'Email about a new friend request.'
            )) ?></span>
          </label>
        </div>

        <div class="form-check mb-3">
          <input class="form-check-input" type="checkbox" id="email_group_invite" name="email_group_invite" value="1" <?= ((int)$prefs['email_group_invite'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_group_invite">
            <span class="fw-semibold"><?= h($T('Запрошення в групу', 'Приглашение в группу', 'Group invite')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист про нове запрошення в групу. Повторні листи обмежуються антиспам-інтервалом.',
              'Письмо о новом приглашении в группу. Повторные письма ограничиваются антиспам-интервалом.',
              'Email about a new group invite. Repeated emails are limited by an anti-spam interval.'
            )) ?></span>
          </label>
        </div>

        <div class="form-check mb-3">
          <input class="form-check-input" type="checkbox" id="email_group_join_request" name="email_group_join_request" value="1" <?= ((int)$prefs['email_group_join_request'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_group_join_request">
            <span class="fw-semibold"><?= h($T('Заявка на вступ у групу', 'Заявка на вступление в группу', 'Request to join a group')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист керівникам групи про нову заявку на вступ.',
              'Письмо руководителям группы о новой заявке на вступление.',
              'Email to group managers about a new join request.'
            )) ?></span>
          </label>
        </div>

        <div class="form-check mb-3">
          <input class="form-check-input" type="checkbox" id="email_comment_reply" name="email_comment_reply" value="1" <?= ((int)$prefs['email_comment_reply'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_comment_reply">
            <span class="fw-semibold"><?= h($T('Відповідь на мій коментар', 'Ответ на мой комментарий', 'Reply to my comment')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист, коли хтось відповідає на ваш коментар. Повторні листи по одній гілці обмежуються cooldown.',
              'Письмо, когда кто-то отвечает на ваш комментарий. Повторные письма по одной ветке ограничиваются cooldown.',
              'Email when someone replies to your comment. Repeated emails for the same thread are limited by cooldown.'
            )) ?></span>
          </label>
        </div>

        <div class="form-check mb-4">
          <input class="form-check-input" type="checkbox" id="email_post_comment" name="email_post_comment" value="1" <?= ((int)$prefs['email_post_comment'] === 1 ? 'checked' : '') ?>>
          <label class="form-check-label" for="email_post_comment">
            <span class="fw-semibold"><?= h($T('Новий коментар до мого поста', 'Новый комментарий к моему посту', 'New comment on my post')) ?></span><br>
            <span class="text-muted small"><?= h($T(
              'Лист, коли хтось коментує ваш пост. Якщо це ще й відповідь на ваш коментар, дубль не надсилається.',
              'Письмо, когда кто-то комментирует ваш пост. Если это ещё и ответ на ваш комментарий, дубль не отправляется.',
              'Email when someone comments on your post. If it is also a reply to your comment, a duplicate is not sent.'
            )) ?></span>
          </label>
        </div>

        <div class="d-flex gap-2 flex-wrap">
          <button class="btn btn-primary" type="submit"><?= h($T('Зберегти', 'Сохранить', 'Save')) ?></button>
          <a class="btn btn-outline-secondary" href="/profile/setting/index.php"><?= h($T('Скасувати', 'Отмена', 'Cancel')) ?></a>
        </div>
      </form>
    </div>
  </section>

  <aside>
    <div class="sidebar-sticky">
      <?php
        $groupsBlock = __DIR__ . '/../../blocks/groups.php';
        if (is_file($groupsBlock)) require $groupsBlock;

        $gamesBlock = __DIR__ . '/../../blocks/games.php';
        if (is_file($gamesBlock)) {
            echo '<div class="mt-3">';
            require $gamesBlock;
            echo '</div>';
        }
      ?>
    </div>
  </aside>
</div>

<?php require __DIR__ . '/../../includes/footer.php'; ?>