-- ===================================================================
-- 清理脚本：删除新设计的全局配置表
-- 保留原有的 ak_global_config 表（单表设计）
-- ===================================================================

-- 注意：执行前请确保已备份重要数据！

-- 1. 删除函数（按依赖顺序）
DROP FUNCTION IF EXISTS public.get_configs_by_language(VARCHAR);
DROP FUNCTION IF EXISTS public.get_config_by_language(VARCHAR);
DROP FUNCTION IF EXISTS public.get_config_value(VARCHAR, VARCHAR);
DROP FUNCTION IF EXISTS public.get_hot_searches(VARCHAR);

-- 2. 删除视图
DROP VIEW IF EXISTS public.vw_global_config_multilingual;

-- 3. 删除触发器
DROP TRIGGER IF EXISTS update_ak_global_config_updated_at ON public.ak_global_config;
DROP TRIGGER IF EXISTS update_ak_global_config_translations_updated_at ON public.ak_global_config_translations;

-- 4. 删除翻译表（有外键约束，先删除）
DROP TABLE IF EXISTS public.ak_global_config_translations CASCADE;

-- 5. 删除新设计的主配置表
-- 注意：确保只删除新设计的表，保留原有的单表设计
DROP TABLE IF EXISTS public.ak_global_configs CASCADE;

-- 6. 删除语言表（如果是新创建的）
-- 注意：保留现有的 ak_languages 表，因为它与 ak_contents 系统有关联
-- DROP TABLE IF EXISTS public.ak_languages CASCADE;

-- 7. 强制删除可能存在的其他新设计表
DROP TABLE IF EXISTS public.ak_config_main CASCADE;
DROP TABLE IF EXISTS public.ak_config_translations CASCADE;

-- 8. 删除相关索引（如果表还存在的话，索引会自动删除）
-- 这些索引可能在删除表时已经自动删除了

-- 8. 验证清理结果
DO $$
DECLARE
    table_count INTEGER;
    function_count INTEGER;
    view_count INTEGER;
BEGIN
    -- 检查表是否还存在（排除现有的 ak_languages 表）
    SELECT COUNT(*) INTO table_count 
    FROM information_schema.tables 
    WHERE table_schema = 'public' 
    AND table_name IN ('ak_global_config_translations', 'ak_global_configs');
    
    -- 检查函数是否还存在
    SELECT COUNT(*) INTO function_count 
    FROM information_schema.routines 
    WHERE routine_schema = 'public' 
    AND routine_name IN ('get_configs_by_language', 'get_config_by_language', 'get_config_value', 'get_hot_searches');
    
    -- 检查视图是否还存在
    SELECT COUNT(*) INTO view_count 
    FROM information_schema.views 
    WHERE table_schema = 'public' 
    AND table_name = 'vw_global_config_multilingual';
    
    RAISE NOTICE '========================================';
    RAISE NOTICE '清理结果检查：';
    RAISE NOTICE '剩余相关表数量: %', table_count;
    RAISE NOTICE '剩余相关函数数量: %', function_count;
    RAISE NOTICE '剩余相关视图数量: %', view_count;
    
    IF table_count = 0 AND function_count = 0 AND view_count = 0 THEN
        RAISE NOTICE '✅ 清理完成！新设计的表结构已完全删除';
    ELSE
        RAISE NOTICE '⚠️ 还有一些对象未删除，请检查';
    END IF;
    
    RAISE NOTICE '========================================';
END $$;

-- 9. 检查原有表是否还存在
DO $$
DECLARE
    original_table_exists BOOLEAN;
BEGIN
    SELECT EXISTS (
        SELECT 1 FROM information_schema.tables 
        WHERE table_schema = 'public' 
        AND table_name = 'ak_global_config'
        AND table_type = 'BASE TABLE'
    ) INTO original_table_exists;
    
    IF original_table_exists THEN
        RAISE NOTICE '✅ 原有的 ak_global_config 表仍然存在，可以继续使用';
        
        -- 显示原有表的基本信息
        RAISE NOTICE '原有表的配置数量: %', (
            SELECT COUNT(*) FROM public.ak_global_config WHERE is_active = true
        );
    ELSE
        RAISE NOTICE '❌ 警告：原有的 ak_global_config 表不存在！';
        RAISE NOTICE '如果您不小心删除了原有表，请从备份恢复';
    END IF;
END $$;

-- 10. 可选：重新创建 update_updated_at_column 函数（如果被删除了）
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ language 'plpgsql';

-- 11. 可选：重新为原有表创建触发器（如果被删除了）
DROP TRIGGER IF EXISTS update_ak_global_config_updated_at ON public.ak_global_config;
CREATE TRIGGER update_ak_global_config_updated_at
    BEFORE UPDATE ON public.ak_global_config
    FOR EACH ROW
    EXECUTE FUNCTION update_updated_at_column();

-- 完成提示
DO $$
BEGIN
    RAISE NOTICE '========================================';
    RAISE NOTICE '清理脚本执行完成！';
    RAISE NOTICE '========================================';
    RAISE NOTICE '后续步骤：';
    RAISE NOTICE '1. 确认原有的 ak_global_config 表正常工作';
    RAISE NOTICE '2. 执行 optimize_existing_global_config.sql 优化现有表的查询';
    RAISE NOTICE '3. 更新前端代码使用优化后的查询函数';
    RAISE NOTICE '4. 测试配置系统功能是否正常';
    RAISE NOTICE '========================================';
END $$;
