-- 数据源表增强
-- 新增 value_type, aggregate_type, separator 字段
-- 修改 node_ids 为 JSONB 类型以支持混合节点引用

-- 添加新字段
ALTER TABLE data_sources 
ADD COLUMN IF NOT EXISTS value_type VARCHAR(20) DEFAULT 'text';

ALTER TABLE data_sources 
ADD COLUMN IF NOT EXISTS aggregate_type VARCHAR(20) DEFAULT 'first';

ALTER TABLE data_sources 
ADD COLUMN IF NOT EXISTS separator VARCHAR(50) DEFAULT '';

-- 添加字段注释
COMMENT ON COLUMN data_sources.value_type IS '值类型: text/image/table/mixed';
COMMENT ON COLUMN data_sources.aggregate_type IS '聚合方式: first/last/concat/sum/avg/list';
COMMENT ON COLUMN data_sources.separator IS '聚合分隔符（concat时使用）';

-- 检查并修改 node_ids 类型（如果是 TEXT[] 则转为 JSONB）
-- 注意：如果已经是 JSONB 类型，此语句会失败，这是预期行为
DO $$
BEGIN
    -- 检查当前类型
    IF EXISTS (
        SELECT 1 
        FROM information_schema.columns 
        WHERE table_name = 'data_sources' 
        AND column_name = 'node_ids' 
        AND data_type = 'ARRAY'
    ) THEN
        -- 如果是数组类型，转换为 JSONB
        ALTER TABLE data_sources 
        ALTER COLUMN node_ids TYPE JSONB 
        USING CASE 
            WHEN node_ids IS NULL THEN '{"refs": []}'::JSONB
            ELSE jsonb_build_object('refs', 
                (SELECT jsonb_agg(jsonb_build_object('type', 'graph_node', 'id', elem))
                 FROM unnest(node_ids::text[]) AS elem)
            )
        END;
        RAISE NOTICE 'Converted node_ids from TEXT[] to JSONB';
    ELSE
        RAISE NOTICE 'node_ids is already JSONB or compatible type';
    END IF;
END $$;

-- 设置默认值
ALTER TABLE data_sources 
ALTER COLUMN node_ids SET DEFAULT '{"refs": []}'::JSONB;
