-- ============================================================
-- 系统配置表合并脚本 - PostgreSQL
-- 将 system_ai_configs 合并到 system_configs 表
-- 通过 category 字段区分配置类型
-- 
-- 执行方式: psql -U postgres -d ctf -f merge_config_tables.sql
-- 
-- ⚠️  执行前请备份数据库！
-- ============================================================

BEGIN;

-- ============================================================
-- 1. 为 system_configs 添加 category 字段（如果不存在）
-- ============================================================

ALTER TABLE system_configs 
ADD COLUMN IF NOT EXISTS category VARCHAR(50);

-- ============================================================
-- 2. 更新现有 system_configs 的 category（如果没有）
-- ============================================================

-- 如果 category 为 NULL，设置为 'general'
UPDATE system_configs 
SET category = 'general'
WHERE category IS NULL;

-- ============================================================
-- 3. 删除旧的唯一约束（如果存在）
-- ============================================================

-- PostgreSQL
ALTER TABLE system_configs 
DROP CONSTRAINT IF EXISTS system_configs_key_key;

-- SQLite 不需要，因为 unique 约束不同

-- ============================================================
-- 4. 添加新的复合唯一约束（key + category）
-- ============================================================

-- 先删除可能存在的约束
DO $$
BEGIN
    IF EXISTS (
        SELECT 1 FROM pg_constraint 
        WHERE conname = 'uq_config_key_category'
    ) THEN
        ALTER TABLE system_configs DROP CONSTRAINT uq_config_key_category;
    END IF;
END $$;

-- 添加新的复合唯一约束
ALTER TABLE system_configs 
ADD CONSTRAINT uq_config_key_category 
UNIQUE (key, category);

-- ============================================================
-- 5. 迁移 system_ai_configs 数据到 system_configs
-- ============================================================

INSERT INTO system_configs (
    key, value, description, category, enabled, created_at, updated_at
)
SELECT 
    key,
    value,
    description,
    'ai' as category,  -- 标识为 AI 配置
    TRUE as enabled,   -- system_ai_configs 没有 enabled 字段，默认 TRUE
    created_at,
    updated_at
FROM system_ai_configs
ON CONFLICT (key, category) DO UPDATE
SET value = EXCLUDED.value,
    description = EXCLUDED.description,
    updated_at = EXCLUDED.updated_at;

-- ============================================================
-- 6. 创建索引（提升查询性能）
-- ============================================================

CREATE INDEX IF NOT EXISTS idx_system_configs_category 
ON system_configs(category);

CREATE INDEX IF NOT EXISTS idx_system_configs_key_category_enabled 
ON system_configs(key, category, enabled);

-- ============================================================
-- 7. 验证数据迁移
-- ============================================================

-- 检查迁移数据量
SELECT 
    category,
    COUNT(*) as count
FROM system_configs
GROUP BY category
ORDER BY category;

-- 检查原表数据量（用于对比）
SELECT 'system_ai_configs' as table_name, COUNT(*) as count FROM system_ai_configs;

-- 验证数据完整性（检查 key 是否都迁移成功）
SELECT 
    'system_ai_configs' as source_table,
    COUNT(*) as original_count
FROM system_ai_configs
UNION ALL
SELECT 
    'system_configs (ai)' as target_table,
    COUNT(*) as migrated_count
FROM system_configs
WHERE category = 'ai';

COMMIT;

-- ============================================================
-- 8. 删除旧表（⚠️  确认数据迁移成功后再执行）
-- ============================================================

-- 取消注释以下行来删除旧表
-- BEGIN;
-- DROP TABLE IF EXISTS system_ai_configs;
-- COMMIT;

-- ============================================================
-- 回滚脚本（如果需要回滚）
-- ============================================================

-- 如果需要回滚，取消注释以下内容并执行
-- 
-- BEGIN;
-- 
-- -- 从 system_configs 恢复 system_ai_configs
-- CREATE TABLE system_ai_configs AS
-- SELECT id, key, value, description, created_at, updated_at
-- FROM system_configs
-- WHERE category = 'ai';
-- 
-- ALTER TABLE system_ai_configs ADD PRIMARY KEY (id);
-- ALTER TABLE system_ai_configs ADD CONSTRAINT system_ai_configs_key_key UNIQUE(key);
-- 
-- -- 从 system_configs 删除 AI 配置
-- DELETE FROM system_configs WHERE category = 'ai';
-- 
-- -- 恢复旧约束
-- ALTER TABLE system_configs 
-- DROP CONSTRAINT IF EXISTS uq_config_key_category;
-- 
-- ALTER TABLE system_configs 
-- ADD CONSTRAINT system_configs_key_key UNIQUE(key);
-- 
-- -- 删除 category 字段（可选，如果需要完全回滚）
-- -- ALTER TABLE system_configs DROP COLUMN IF EXISTS category;
-- 
-- COMMIT;

