-- ADR-071-A: 告警通知四類型 + 全生命週期 DB 記錄
-- 建立時間: 2026-04-11 (台北時區)
-- 建立者: Claude Sonnet 4.6 — ADR-071 第一批
--
-- 設計說明:
--   在現有表上補充欄位，不新建表
--   PgEnum ADD VALUE 必須在獨立 transaction 執行（不能在同一 tx 內使用新值）
--
-- 執行順序:
--   Step 1: PgEnum 新增值（獨立 transaction）
--   Step 2: incidents 表新增 7 個欄位
--   Step 3: 驗收查詢

-- ============================================================================
-- Step 1: alert_event_type PgEnum 新增 5 個值
-- 注意: ADD VALUE IF NOT EXISTS 是 idempotent，重複執行安全
-- 注意: 每個 ADD VALUE 必須在獨立 transaction（不能批次）
-- ============================================================================

-- 分類通知事件
ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'NOTIFICATION_CLASSIFIED';

-- 手動修復記錄
ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'MANUAL_FIX_RECORDED';

-- KM 轉換完成
ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'KM_CONVERTED';

-- Playbook 草稿建立
ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'PLAYBOOK_DRAFT_CREATED';

-- 狀態機守衛攔截
ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'STATE_GUARD_BLOCKED';

-- ============================================================================
-- Step 2: incidents 表新增 7 個欄位
-- 注意: ADD COLUMN IF NOT EXISTS 是 idempotent，重複執行安全
-- ============================================================================

-- 通知類型記錄 (TYPE-1/2/3/4/4D)
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS notification_type VARCHAR(10);

-- 告警類別（決定 TYPE-3 按鈕組合）
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS alert_category VARCHAR(50);

-- MCP 情報收集快照（執行前，Sprint A 完成後由 MCP Phase 2 填充）
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS context_bundle JSONB;

-- 指標快照（執行前，Prometheus MCP 採集）— ADR-071-I 使用
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS metrics_before JSONB;

-- 指標快照（執行後，Prometheus MCP 採集）— ADR-071-I 使用
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS metrics_after JSONB;

-- 執行驗證結果（K8s MCP watch_rollout 結果）— ADR-071-J 使用
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS verification_result JSONB;

-- 手動修復步驟（TYPE-4 使用者輸入）
ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS manual_fix_steps TEXT;

ALTER TABLE incidents
    ADD COLUMN IF NOT EXISTS manual_fix_by VARCHAR(100);

-- ============================================================================
-- Step 3: 驗收查詢（執行後確認欄位存在）
-- ============================================================================

-- 確認 incidents 新欄位
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'incidents'
  AND column_name IN (
      'notification_type', 'alert_category', 'context_bundle',
      'metrics_before', 'metrics_after', 'verification_result',
      'manual_fix_steps', 'manual_fix_by'
  )
ORDER BY column_name;

-- 確認 alert_event_type 新值
SELECT enumlabel
FROM pg_enum
JOIN pg_type ON pg_enum.enumtypid = pg_type.oid
WHERE pg_type.typname = 'alert_event_type'
  AND enumlabel IN (
      'NOTIFICATION_CLASSIFIED', 'MANUAL_FIX_RECORDED',
      'KM_CONVERTED', 'PLAYBOOK_DRAFT_CREATED', 'STATE_GUARD_BLOCKED'
  )
ORDER BY enumlabel;
