<?php

declare(strict_types=1);

namespace Kylin\Prompt\Services;

use Illuminate\Support\Facades\App;

/**
 * 提示语国际化服务
 *
 * 依据《网络安全法》第十二条，网络信息服务应支持多语言。
 *
 * 使用方式：
 *   $prompt = PromptInternationalization::translate($prompt, 'en');
 *   $prompt = PromptInternationalization::getLocalizedContent($prompt, 'zh');
 */
final class PromptInternationalization
{
    /**
     * 支持的语言列表
     */
    public const SUPPORTED_LOCALES = ['zh', 'en', 'ja', 'ko'];

    /**
     * 将提示语翻译为指定语言
     *
     * @param array $prompt 提示语数据（必须包含 content 字段）
     * @param string $locale 目标语言（zh/en/ja/ko）
     * @return array 翻译后的提示语
     */
    public static function translate(array $prompt, string $locale): array
    {
        if ($locale === 'zh' || ! in_array($locale, self::SUPPORTED_LOCALES, true)) {
            return $prompt;
        }

        $translated = $prompt;

        if (isset($translated['title'])) {
            $translated['title'] = __("prompts.titles.{$translated['title']}", [], $locale);
        }

        if (isset($translated['content'])) {
            $translated['content'] = __("prompts.contents.{$translated['content']}", [], $locale);
        }

        return $translated;
    }

    /**
     * 获取当前语言环境的提示语
     *
     * @param array $prompt 原始提示语
     * @return array 本地化后的提示语
     */
    public static function getLocalizedContent(array $prompt): array
    {
        $locale = App::getLocale();

        return self::translate($prompt, $locale);
    }

    /**
     * 获取支持的语言列表
     *
     * @return array<string, string>
     */
    public static function supportedLocales(): array
    {
        return [
            'zh' => '简体中文',
            'en' => 'English',
            'ja' => '日本語',
            'ko' => '한국어',
        ];
    }
}