<?php
declare(strict_types=1);

/**
 * /functional/notifications/templates.php
 * Відповідає за:
 * - 3-мовні шаблони email-сповіщень
 * - subject/html/text для типів:
 *   - private_message
 *   - friend_request
 *   - group_invite
 *   - group_join_request
 *   - comment_reply
 *   - post_comment
 */

if (!function_exists('ntf_tpl_label')) {
    function ntf_tpl_label(string $lang, string $uk, string $ru, string $en): string
    {
        return match ($lang) {
            'ru' => $ru,
            'en' => $en,
            default => $uk,
        };
    }
}

if (!function_exists('ntf_tpl_wrap')) {
    function ntf_tpl_wrap(
        string $lang,
        string $siteName,
        string $subject,
        string $headline,
        string $leadText,
        string $buttonLabel,
        string $buttonUrl,
        string $prefUrl,
        string $extraText = ''
    ): array {
        $settingsLabel = ntf_tpl_label(
            $lang,
            'Налаштування сповіщень',
            'Настройки уведомлений',
            'Notification settings'
        );

        $footerText = ntf_tpl_label(
            $lang,
            'Ви отримали цього листа, бо email-сповіщення увімкнені у вашому профілі.',
            'Вы получили это письмо, потому что email-уведомления включены в вашем профиле.',
            'You received this email because email notifications are enabled in your profile.'
        );

        $bodyText = trim($leadText . ($extraText !== '' ? ("\n\n" . $extraText) : ''));

        $html = '<!doctype html><html lang="' . ntf_h($lang) . '"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head><body style="margin:0;padding:0;background:#f4f6fb;font-family:Arial,Helvetica,sans-serif;color:#111827;">'
              . '<div style="max-width:640px;margin:0 auto;padding:24px 16px;">'
              . '<div style="background:#ffffff;border:1px solid rgba(0,0,0,.08);border-radius:18px;overflow:hidden;">'
              . '<div style="padding:20px 22px;background:linear-gradient(135deg,#1f5eff,#0ea5e9);color:#fff;">'
              . '<div style="font-size:13px;opacity:.9;">' . ntf_h($siteName) . '</div>'
              . '<div style="margin-top:6px;font-size:24px;font-weight:700;line-height:1.25;">' . ntf_h($headline) . '</div>'
              . '</div>'
              . '<div style="padding:22px;">'
              . '<div style="font-size:15px;line-height:1.65;white-space:pre-line;color:#111827;">' . nl2br(ntf_h($bodyText)) . '</div>'
              . '<div style="margin-top:20px;">'
              . '<a href="' . ntf_h($buttonUrl) . '" style="display:inline-block;padding:12px 18px;border-radius:12px;background:#2563eb;color:#fff;text-decoration:none;font-weight:700;">' . ntf_h($buttonLabel) . '</a>'
              . '</div>'
              . '<div style="margin-top:18px;font-size:13px;color:#6b7280;line-height:1.55;">' . ntf_h($footerText) . '</div>'
              . '<div style="margin-top:10px;font-size:13px;"><a href="' . ntf_h($prefUrl) . '" style="color:#2563eb;text-decoration:none;">' . ntf_h($settingsLabel) . '</a></div>'
              . '</div>'
              . '</div>'
              . '</div></body></html>';

        $text = $headline
              . "\n\n"
              . $bodyText
              . "\n\n"
              . $buttonLabel . ': ' . $buttonUrl
              . "\n"
              . $settingsLabel . ': ' . $prefUrl
              . "\n\n"
              . $footerText;

        return [
            'subject' => $subject,
            'html'    => $html,
            'text'    => $text,
        ];
    }
}

if (!function_exists('ntf_tpl_private_message')) {
    function ntf_tpl_private_message(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $buttonUrl = (string)($ctx['button_url'] ?? '/');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');
        $snippet = trim((string)($ctx['snippet'] ?? ''));

        $subject = ntf_tpl_label(
            $lang,
            'Нове приватне повідомлення від ' . $actor . ' — ' . $site,
            'Новое личное сообщение от ' . $actor . ' — ' . $site,
            'New private message from ' . $actor . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Нове приватне повідомлення',
            'Новое личное сообщение',
            'New private message'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' надіслав(ла) вам нове приватне повідомлення.',
            $actor . ' отправил(а) вам новое личное сообщение.',
            $actor . ' sent you a new private message.'
        );

        $extra = $snippet !== '' ? ntf_tpl_label(
            $lang,
            'Фрагмент повідомлення: ' . $snippet,
            'Фрагмент сообщения: ' . $snippet,
            'Message preview: ' . $snippet
        ) : '';

        $button = ntf_tpl_label(
            $lang,
            'Відкрити діалог',
            'Открыть диалог',
            'Open dialog'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl, $extra);
    }
}

if (!function_exists('ntf_tpl_friend_request')) {
    function ntf_tpl_friend_request(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $buttonUrl = (string)($ctx['button_url'] ?? '/functional/friends/');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');

        $subject = ntf_tpl_label(
            $lang,
            'Новий запит у друзі від ' . $actor . ' — ' . $site,
            'Новая заявка в друзья от ' . $actor . ' — ' . $site,
            'New friend request from ' . $actor . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Новий запит у друзі',
            'Новая заявка в друзья',
            'New friend request'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' надіслав(ла) вам запит у друзі.',
            $actor . ' отправил(а) вам заявку в друзья.',
            $actor . ' sent you a friend request.'
        );

        $button = ntf_tpl_label(
            $lang,
            'Переглянути запити',
            'Посмотреть заявки',
            'View requests'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl);
    }
}

if (!function_exists('ntf_tpl_group_invite')) {
    function ntf_tpl_group_invite(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $group = trim((string)($ctx['group_name'] ?? ''));
        $buttonUrl = (string)($ctx['button_url'] ?? '/group.php');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');

        $subject = ntf_tpl_label(
            $lang,
            'Запрошення в групу' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site,
            'Приглашение в группу' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site,
            'Group invite' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Нове запрошення в групу',
            'Новое приглашение в группу',
            'New group invite'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' запросив(ла) вас до групи' . ($group !== '' ? ' "' . $group . '"' : '') . '.',
            $actor . ' пригласил(а) вас в группу' . ($group !== '' ? ' "' . $group . '"' : '') . '.',
            $actor . ' invited you to the group' . ($group !== '' ? ' "' . $group . '"' : '') . '.'
        );

        $button = ntf_tpl_label(
            $lang,
            'Відкрити групу',
            'Открыть группу',
            'Open group'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl);
    }
}

if (!function_exists('ntf_tpl_group_join_request')) {
    function ntf_tpl_group_join_request(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $group = trim((string)($ctx['group_name'] ?? ''));
        $buttonUrl = (string)($ctx['button_url'] ?? '/group.php');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');

        $subject = ntf_tpl_label(
            $lang,
            'Нова заявка на вступ у групу' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site,
            'Новая заявка на вступление в группу' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site,
            'New request to join group' . ($group !== '' ? ': ' . $group : '') . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Нова заявка на вступ у групу',
            'Новая заявка на вступление в группу',
            'New request to join group'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' надіслав(ла) заявку на вступ у групу' . ($group !== '' ? ' "' . $group . '"' : '') . '.',
            $actor . ' отправил(а) заявку на вступление в группу' . ($group !== '' ? ' "' . $group . '"' : '') . '.',
            $actor . ' requested to join the group' . ($group !== '' ? ' "' . $group . '"' : '') . '.'
        );

        $button = ntf_tpl_label(
            $lang,
            'Відкрити групу',
            'Открыть группу',
            'Open group'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl);
    }
}

if (!function_exists('ntf_tpl_comment_reply')) {
    function ntf_tpl_comment_reply(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $buttonUrl = (string)($ctx['button_url'] ?? '/');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');
        $snippet = trim((string)($ctx['snippet'] ?? ''));

        $subject = ntf_tpl_label(
            $lang,
            'Нова відповідь на ваш коментар від ' . $actor . ' — ' . $site,
            'Новый ответ на ваш комментарий от ' . $actor . ' — ' . $site,
            'New reply to your comment from ' . $actor . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Нова відповідь на ваш коментар',
            'Новый ответ на ваш комментарий',
            'New reply to your comment'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' відповів(ла) на ваш коментар.',
            $actor . ' ответил(а) на ваш комментарий.',
            $actor . ' replied to your comment.'
        );

        $extra = $snippet !== '' ? ntf_tpl_label(
            $lang,
            'Фрагмент нового коментаря: ' . $snippet,
            'Фрагмент нового комментария: ' . $snippet,
            'New comment preview: ' . $snippet
        ) : '';

        $button = ntf_tpl_label(
            $lang,
            'Переглянути відповідь',
            'Посмотреть ответ',
            'View reply'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl, $extra);
    }
}

if (!function_exists('ntf_tpl_post_comment')) {
    function ntf_tpl_post_comment(array $ctx): array
    {
        $lang = (string)($ctx['lang'] ?? 'uk');
        $site = (string)($ctx['site_name'] ?? 'VMEREGI');
        $actor = (string)($ctx['actor_display'] ?? 'User');
        $buttonUrl = (string)($ctx['button_url'] ?? '/');
        $prefUrl = (string)($ctx['pref_url'] ?? '/profile/setting/notifications.php');
        $snippet = trim((string)($ctx['snippet'] ?? ''));

        $subject = ntf_tpl_label(
            $lang,
            'Новий коментар до вашого поста від ' . $actor . ' — ' . $site,
            'Новый комментарий к вашему посту от ' . $actor . ' — ' . $site,
            'New comment on your post from ' . $actor . ' — ' . $site
        );

        $headline = ntf_tpl_label(
            $lang,
            'Новий коментар до вашого поста',
            'Новый комментарий к вашему посту',
            'New comment on your post'
        );

        $lead = ntf_tpl_label(
            $lang,
            $actor . ' прокоментував(ла) ваш пост.',
            $actor . ' прокомментировал(а) ваш пост.',
            $actor . ' commented on your post.'
        );

        $extra = $snippet !== '' ? ntf_tpl_label(
            $lang,
            'Фрагмент коментаря: ' . $snippet,
            'Фрагмент комментария: ' . $snippet,
            'Comment preview: ' . $snippet
        ) : '';

        $button = ntf_tpl_label(
            $lang,
            'Переглянути коментар',
            'Посмотреть комментарий',
            'View comment'
        );

        return ntf_tpl_wrap($lang, $site, $subject, $headline, $lead, $button, $buttonUrl, $prefUrl, $extra);
    }
}