-- ===================================================================
-- 修复翻译数据插入问题的脚本
-- 自动适配现有语言代码，避免 NULL 值错误
-- ===================================================================

-- 首先检查现有的语言代码
DO $$
DECLARE
    rec RECORD;
BEGIN
    RAISE NOTICE '========================================';
    RAISE NOTICE '检查现有的语言代码：';
    RAISE NOTICE '========================================';
    
    FOR rec IN 
        SELECT code, name FROM public.ak_languages WHERE is_active = true ORDER BY code
    LOOP
        RAISE NOTICE '语言代码: % - 名称: %', rec.code, rec.name;
    END LOOP;
    
    RAISE NOTICE '========================================';
END $$;

-- 创建一个通用的翻译函数，自动处理语言代码映射
CREATE OR REPLACE FUNCTION get_translation_value(
    p_language_code VARCHAR(10),
    p_config_key VARCHAR(100)
) RETURNS TEXT AS $$
DECLARE
    lang_code TEXT;
BEGIN
    -- 标准化语言代码
    lang_code := CASE 
        WHEN p_language_code IN ('zh', 'zh-CN', 'zh_CN') THEN 'zh'
        WHEN p_language_code IN ('en', 'en-US', 'en_US') THEN 'en'
        WHEN p_language_code IN ('tw', 'zh-TW', 'zh_TW') THEN 'tw'
        WHEN p_language_code IN ('ja', 'ja-JP', 'ja_JP') THEN 'ja'
        ELSE 'zh' -- 默认中文
    END;
    
    -- 根据配置键和语言返回翻译
    RETURN CASE p_config_key
        -- 公司名称
        WHEN 'company_name' THEN 
            CASE lang_code
                WHEN 'zh' THEN '创新科技有限公司'
                WHEN 'en' THEN 'Innovation Technology Co., Ltd.'
                WHEN 'tw' THEN '創新科技有限公司'
                WHEN 'ja' THEN 'イノベーション技術株式会社'
                ELSE '创新科技有限公司'
            END
        -- 公司标语
        WHEN 'company_slogan' THEN 
            CASE lang_code
                WHEN 'zh' THEN '科技创新，未来可期'
                WHEN 'en' THEN 'Innovation for the Future'
                WHEN 'tw' THEN '科技創新，未來可期'
                WHEN 'ja' THEN '技術革新で未来を創る'
                ELSE '科技创新，未来可期'
            END
        -- 公司地址
        WHEN 'company_address' THEN 
            CASE lang_code
                WHEN 'zh' THEN '上海市浦东新区张江高科技园区创新路88号'
                WHEN 'en' THEN '88 Innovation Road, Zhangjiang Hi-Tech Park, Pudong New Area, Shanghai'
                WHEN 'tw' THEN '上海市浦東新區張江高科技園區創新路88號'
                WHEN 'ja' THEN '上海市浦東新区張江ハイテクパーク イノベーション路88号'
                ELSE '上海市浦东新区张江高科技园区创新路88号'
            END
        -- 热门搜索1
        WHEN 'hot_search_1' THEN 
            CASE lang_code
                WHEN 'zh' THEN '人工智能'
                WHEN 'en' THEN 'Artificial Intelligence'
                WHEN 'tw' THEN '人工智慧'
                WHEN 'ja' THEN '人工知能'
                ELSE '人工智能'
            END
        -- 热门搜索2
        WHEN 'hot_search_2' THEN 
            CASE lang_code
                WHEN 'zh' THEN '大数据分析'
                WHEN 'en' THEN 'Big Data Analytics'
                WHEN 'tw' THEN '大數據分析'
                WHEN 'ja' THEN 'ビッグデータ解析'
                ELSE '大数据分析'
            END
        -- 热门搜索3
        WHEN 'hot_search_3' THEN 
            CASE lang_code
                WHEN 'zh' THEN '物联网'
                WHEN 'en' THEN 'Internet of Things'
                WHEN 'tw' THEN '物聯網'
                WHEN 'ja' THEN 'IoT'
                ELSE '物联网'
            END
        -- 热门搜索4
        WHEN 'hot_search_4' THEN 
            CASE lang_code
                WHEN 'zh' THEN '云计算'
                WHEN 'en' THEN 'Cloud Computing'
                WHEN 'tw' THEN '雲端運算'
                WHEN 'ja' THEN 'クラウドコンピューティング'
                ELSE '云计算'
            END
        -- 热门搜索5
        WHEN 'hot_search_5' THEN 
            CASE lang_code
                WHEN 'zh' THEN '区块链'
                WHEN 'en' THEN 'Blockchain'
                WHEN 'tw' THEN '區塊鏈'
                WHEN 'ja' THEN 'ブロックチェーン'
                ELSE '区块链'
            END
        ELSE NULL
    END;
END;
$$ LANGUAGE plpgsql;

-- 安全插入翻译数据的函数
CREATE OR REPLACE FUNCTION safe_insert_translations()
RETURNS VOID AS $$
DECLARE
    config_rec RECORD;
    lang_rec RECORD;
    translation_value TEXT;
BEGIN
    -- 获取所有需要翻译的配置项
    FOR config_rec IN 
        SELECT id, config_key 
        FROM public.ak_global_config 
        WHERE is_translatable = true AND is_active = true
    LOOP
        -- 为每种语言插入翻译
        FOR lang_rec IN 
            SELECT code FROM public.ak_languages WHERE is_active = true
        LOOP
            -- 获取翻译值
            translation_value := get_translation_value(lang_rec.code, config_rec.config_key);
            
            -- 只有翻译值不为空时才插入
            IF translation_value IS NOT NULL THEN
                INSERT INTO public.ak_global_config_translations (config_id, language_code, translated_value)
                VALUES (config_rec.id, lang_rec.code, translation_value)
                ON CONFLICT (config_id, language_code) DO UPDATE SET
                    translated_value = EXCLUDED.translated_value,
                    updated_at = NOW();
                    
                RAISE NOTICE '已插入翻译: % - % = %', config_rec.config_key, lang_rec.code, translation_value;
            ELSE
                RAISE NOTICE '跳过翻译: % - % (无对应翻译)', config_rec.config_key, lang_rec.code;
            END IF;
        END LOOP;
    END LOOP;
    
    RAISE NOTICE '翻译数据插入完成！';
END;
$$ LANGUAGE plpgsql;

-- 执行安全插入
SELECT safe_insert_translations();

-- 验证插入结果
DO $$
DECLARE
    config_count INTEGER;
    translation_count INTEGER;
    lang_count INTEGER;
BEGIN
    SELECT COUNT(*) INTO config_count 
    FROM public.ak_global_config 
    WHERE is_translatable = true AND is_active = true;
    
    SELECT COUNT(*) INTO translation_count 
    FROM public.ak_global_config_translations 
    WHERE is_active = true;
    
    SELECT COUNT(*) INTO lang_count 
    FROM public.ak_languages 
    WHERE is_active = true;
    
    RAISE NOTICE '========================================';
    RAISE NOTICE '翻译数据验证结果：';
    RAISE NOTICE '需要翻译的配置项数量: %', config_count;
    RAISE NOTICE '活跃语言数量: %', lang_count;
    RAISE NOTICE '实际翻译记录数量: %', translation_count;
    RAISE NOTICE '预期翻译记录数量: %', config_count * lang_count;
    RAISE NOTICE '========================================';
END $$;

-- 清理临时函数
DROP FUNCTION IF EXISTS get_translation_value(VARCHAR, VARCHAR);
DROP FUNCTION IF EXISTS safe_insert_translations();

-- 完成提示
DO $$
BEGIN
    RAISE NOTICE '翻译数据修复完成！';
    RAISE NOTICE '现在可以安全地查询多语言配置了。';
END $$;
