-- 【重要】此腳本需由數據庫擁有者或管理員在 PostgreSQL 中執行
-- 在 PostgreSQL 客戶端運行 (如 pgAdmin 或 psql):
-- psql -h 192.168.0.61 -p 55432 -U postgres -d njts_acct -f migration_add_revision_tracking.sql

-- 如果使用 Docker:
-- docker exec <postgres_container> psql -U postgres -d njts_acct -c "copy below commands"

-- ============================================================================
-- 【步驟 1】添加新欄位（如果不存在）
-- ============================================================================

-- 檢查和添加 is_latest 欄位
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'journal_entries' AND column_name = 'is_latest') THEN
        ALTER TABLE journal_entries ADD COLUMN is_latest BOOLEAN DEFAULT true;
        RAISE NOTICE '欄位 is_latest 已添加';
    ELSE
        RAISE NOTICE '欄位 is_latest 已存在';
    END IF;
END $$;

-- 檢查和添加 revision_count 欄位
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'journal_entries' AND column_name = 'revision_count') THEN
        ALTER TABLE journal_entries ADD COLUMN revision_count INTEGER DEFAULT 1;
        RAISE NOTICE '欄位 revision_count 已添加';
    ELSE
        RAISE NOTICE '欄位 revision_count 已存在';
    END IF;
END $$;

-- 檢查和添加 original_entry_id 欄位
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'journal_entries' AND column_name = 'original_entry_id') THEN
        ALTER TABLE journal_entries ADD COLUMN original_entry_id INTEGER;
        ALTER TABLE journal_entries ADD CONSTRAINT fk_original_entry_id 
            FOREIGN KEY (original_entry_id) REFERENCES journal_entries(journal_entry_id) ON DELETE CASCADE;
        RAISE NOTICE '欄位 original_entry_id 已添加';
    ELSE
        RAISE NOTICE '欄位 original_entry_id 已存在';
    END IF;
END $$;

-- ============================================================================
-- 【步驟 2】創建索引（如果不存在）
-- ============================================================================

CREATE INDEX IF NOT EXISTS idx_journal_entries_is_latest 
ON journal_entries(is_latest, entry_date);

CREATE INDEX IF NOT EXISTS idx_journal_entries_original_entry_id 
ON journal_entries(original_entry_id);

-- ============================================================================
-- 【步驟 3】驗證
-- ============================================================================

SELECT 'Migration completed. Column info:' as status;

SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'journal_entries' 
  AND column_name IN ('is_latest', 'revision_count', 'original_entry_id')
ORDER BY ordinal_position;
