-- ============================================================
-- AI Outfit Tables — dashboard_canifa schema
-- Author: Antigravity / Canifa AI Stylist Engine
-- Created: 2026-04-20
-- ============================================================
-- Purpose:
--   Lưu trực tiếp kết quả gợi ý outfit theo từng sản phẩm nguồn + dịp mặc.
--   Thay thế việc scan 1738 sản phẩm lúc runtime bằng 1 SELECT đơn giản.
--
-- Quan hệ:
--   ai_outfit_set  (1 SP nguồn + 1 dịp)
--       └─ ai_outfit_items  (N sản phẩm gợi ý, mỗi item giữ role + rank + score)
-- ============================================================

CREATE SCHEMA IF NOT EXISTS dashboard_canifa;

-- Bảng 1: Nhóm outfit theo (source_code, occasion_tag)
CREATE TABLE IF NOT EXISTS dashboard_canifa.ai_outfit_set (
    id           SERIAL PRIMARY KEY,
    source_code  VARCHAR(50)  NOT NULL,  -- SKU sản phẩm đang xem (magento_ref_code)
    occasion_tag VARCHAR(50)  NOT NULL,  -- di_lam | di_choi | mac_nha | du_lich | the_thao
    created_at   TIMESTAMPTZ  DEFAULT NOW(),
    updated_at   TIMESTAMPTZ  DEFAULT NOW(),
    UNIQUE (source_code, occasion_tag)
);

CREATE INDEX IF NOT EXISTS idx_outfit_set_source
    ON dashboard_canifa.ai_outfit_set(source_code);

-- Bảng 2: Chi tiết từng sản phẩm trong outfit
CREATE TABLE IF NOT EXISTS dashboard_canifa.ai_outfit_items (
    id          SERIAL PRIMARY KEY,
    outfit_id   INT          NOT NULL REFERENCES dashboard_canifa.ai_outfit_set(id) ON DELETE CASCADE,
    target_code VARCHAR(50)  NOT NULL,   -- SKU sản phẩm được gợi ý
    role        VARCHAR(30)  NOT NULL,   -- top | bottom | outer | shoes | accessory | bag
    rank        SMALLINT     NOT NULL DEFAULT 1,  -- thứ tự ưu tiên trong cùng role (1=tốt nhất)
    score       SMALLINT     DEFAULT 0,  -- 0-100
    reason      TEXT         DEFAULT '',
    is_pinned   BOOLEAN      DEFAULT FALSE,  -- stylist tay ghim cứng
    created_at  TIMESTAMPTZ  DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_outfit_items_outfit_id
    ON dashboard_canifa.ai_outfit_items(outfit_id);

CREATE INDEX IF NOT EXISTS idx_outfit_items_target
    ON dashboard_canifa.ai_outfit_items(target_code);
