-- =============================================================================
-- Migration 003: AI 競價情報推薦表
-- MOMO PRO — AI Intelligence Module
-- 2026-04-17 台北
-- =============================================================================
-- 說明:
--   儲存 NemoTron 派發器的 add_to_recommendation 決策歷史。
--   不只是推薦清單，更是 AI 行動記憶 (Decision Memory)，供 OpenClaw 閉環學習。
--
-- 執行方式:
--   psql -U momo -d momo_pro -f migrations/003_ai_price_recommendations.sql
-- =============================================================================

CREATE TABLE IF NOT EXISTS ai_price_recommendations (
    id              SERIAL PRIMARY KEY,

    -- 商品識別（對應 products.i_code + daily_sales_snapshot."商品ID"）
    sku             VARCHAR(50)     NOT NULL,
    name            TEXT            NOT NULL,

    -- AI 決策內容
    reason          TEXT,                           -- 推薦原因（給後台審核人員）
    strategy        VARCHAR(50)     DEFAULT 'promote',  -- promote / watch / hold
    confidence      NUMERIC(4,3),                   -- 0.000 ~ 1.000

    -- 價格數據快照（決策當下的數據，供閉環回溯）
    momo_price      NUMERIC(10,2),
    pchome_price    NUMERIC(10,2),
    gap_pct         NUMERIC(6,2),                   -- 正值=我貴，負值=我便宜
    sales_7d_delta  NUMERIC(6,2),                   -- 近7天銷量變動 %

    -- 模型運算足跡（JSON，結構見下方說明）
    model_footprint JSONB,
    -- 範例:
    -- {
    --   "analyst": {"model": "hermes3:latest", "host": "192.168.0.111",
    --               "duration_sec": 34.2, "tokens_generated": 512, "cost_usd": 0},
    --   "dispatcher": {"model": "meta/llama-3.1-8b-instruct", "platform": "NVIDIA NIM",
    --                  "total_tokens": 185, "quota_used": 2, "cost_usd": 0}
    -- }

    -- 審核狀態流程: pending → approved / rejected
    status          VARCHAR(20)     NOT NULL DEFAULT 'pending',
    reviewed_by     VARCHAR(100),               -- Telegram 用戶名或 'system'
    reviewed_at     TIMESTAMP,

    created_at      TIMESTAMP       NOT NULL DEFAULT NOW(),
    updated_at      TIMESTAMP       NOT NULL DEFAULT NOW()
);

-- 唯一約束：同一 SKU 最多一筆有效推薦（ON CONFLICT UPDATE 邏輯）
CREATE UNIQUE INDEX IF NOT EXISTS uniq_ai_rec_sku ON ai_price_recommendations (sku);

-- 查詢加速
CREATE INDEX IF NOT EXISTS idx_ai_rec_status     ON ai_price_recommendations (status);
CREATE INDEX IF NOT EXISTS idx_ai_rec_created_at ON ai_price_recommendations (created_at DESC);
CREATE INDEX IF NOT EXISTS idx_ai_rec_confidence ON ai_price_recommendations (confidence DESC);

-- 授權
GRANT ALL PRIVILEGES ON ai_price_recommendations TO momo;
GRANT USAGE, SELECT ON SEQUENCE ai_price_recommendations_id_seq TO momo;

-- 完成
DO $$
BEGIN
    RAISE NOTICE '✅ Migration 003 完成 — ai_price_recommendations 表已建立';
END $$;
