<?php
declare(strict_types=1);

if (!function_exists('rc_reclama_pay_error_text')) {
    function rc_reclama_pay_error_text(string $code): string
    {
        return rc_t(
            match ($code) {
                'module_disabled'           => 'Рекламний модуль зараз вимкнений.',
                'status_not_payable'        => 'Спочатку відправ кампанію на модерацію.',
                'already_paid'              => 'Кампанія вже оплачена.',
                'already_refunded'          => 'Для цієї кампанії вже було оформлено повернення.',
                'bad_days_count'            => 'Некоректно пораховано кількість днів.',
                'bad_total_price'           => 'Некоректно пораховано бюджет.',
                'empty_dates'               => 'Заповни дати кампанії.',
                'bad_period'                => 'Період кампанії некоректний.',
                'too_short'                 => 'Період кампанії занадто короткий.',
                'too_long'                  => 'Період кампанії занадто довгий.',
                'desktop_banner_required'   => 'Для банерної кампанії потрібен desktop-банер.',
                'mobile_without_desktop'    => 'Не можна запускати mobile-банер без desktop-версії.',
                'post_campaigns_disabled'   => 'Просування постів зараз вимкнене.',
                'banner_campaigns_disabled' => 'Банерні кампанії зараз вимкнені.',
                default                     => 'Кампанію зараз не можна оплатити.'
            },
            match ($code) {
                'module_disabled'           => 'Рекламный модуль сейчас выключен.',
                'status_not_payable'        => 'Сначала отправь кампанию на модерацию.',
                'already_paid'              => 'Кампания уже оплачена.',
                'already_refunded'          => 'Для этой кампании уже оформлен возврат.',
                'bad_days_count'            => 'Некорректно рассчитано количество дней.',
                'bad_total_price'           => 'Некорректно рассчитан бюджет.',
                'empty_dates'               => 'Заполни даты кампании.',
                'bad_period'                => 'Период кампании некорректный.',
                'too_short'                 => 'Период кампании слишком короткий.',
                'too_long'                  => 'Период кампании слишком длинный.',
                'desktop_banner_required'   => 'Для баннерной кампании нужен desktop-баннер.',
                'mobile_without_desktop'    => 'Нельзя запускать mobile-баннер без desktop-версии.',
                'post_campaigns_disabled'   => 'Продвижение постов сейчас выключено.',
                'banner_campaigns_disabled' => 'Баннерные кампании сейчас выключены.',
                default                     => 'Кампанию сейчас нельзя оплатить.'
            },
            match ($code) {
                'module_disabled'           => 'The ad module is disabled right now.',
                'status_not_payable'        => 'Submit the campaign for moderation first.',
                'already_paid'              => 'This campaign is already paid.',
                'already_refunded'          => 'A refund has already been processed for this campaign.',
                'bad_days_count'            => 'The number of days is invalid.',
                'bad_total_price'           => 'The budget is invalid.',
                'empty_dates'               => 'Fill in the campaign dates.',
                'bad_period'                => 'The campaign period is invalid.',
                'too_short'                 => 'The campaign period is too short.',
                'too_long'                  => 'The campaign period is too long.',
                'desktop_banner_required'   => 'A desktop banner is required for banner campaigns.',
                'mobile_without_desktop'    => 'A mobile banner cannot be used without a desktop version.',
                'post_campaigns_disabled'   => 'Post promotion is disabled right now.',
                'banner_campaigns_disabled' => 'Banner campaigns are disabled right now.',
                default                     => 'The campaign cannot be paid right now.'
            }
        );
    }
}

if (!function_exists('rc_reclama_payment_mode_label')) {
    function rc_reclama_payment_mode_label(string $mode): string
    {
        return $mode === 'reserve'
            ? rc_t('Резервування', 'Резервирование', 'Reservation')
            : rc_t('Оплата', 'Оплата', 'Payment');
    }
}

if (!function_exists('rc_reclama_auth_scope_label')) {
    function rc_reclama_auth_scope_label(?string $scope): string
    {
        $scope = trim((string)$scope);
        return match ($scope) {
            'guests' => rc_t('Тільки гостям', 'Только гостям', 'Guests only'),
            'users'  => rc_t('Тільки авторизованим', 'Только авторизованным', 'Logged-in users only'),
            default  => rc_t('Усім', 'Всем', 'Everyone'),
        };
    }
}

if (!function_exists('rc_reclama_gender_label')) {
    function rc_reclama_gender_label(?string $gender): string
    {
        $gender = trim((string)$gender);
        return match ($gender) {
            'm'     => rc_t('Чоловіча', 'Мужской', 'Male'),
            'f'     => rc_t('Жіноча', 'Женский', 'Female'),
            default => rc_t('Будь-яка', 'Любой', 'Any'),
        };
    }
}

if (!function_exists('rc_reclama_lang_label')) {
    function rc_reclama_lang_label(?string $lang): string
    {
        $lang = trim((string)$lang);
        return match ($lang) {
            'uk'    => 'Українська',
            'ru'    => 'Русский',
            'en'    => 'English',
            default => rc_t('Будь-яка', 'Любой', 'Any'),
        };
    }
}

if (!function_exists('rc_reclama_device_label')) {
    function rc_reclama_device_label(?string $device): string
    {
        $device = trim((string)$device);
        return match ($device) {
            'desktop' => 'Desktop',
            'mobile'  => 'Mobile',
            default   => rc_t('Усі', 'Все', 'All'),
        };
    }
}

if (!function_exists('rc_reclama_float')) {
    function rc_reclama_float(int|float $value, int $decimals = 2): string
    {
        return number_format((float)$value, $decimals, '.', ' ');
    }
}