-- 004_user_scenarios.up.sql
-- 用户自建情景表

CREATE TABLE user_scenarios (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    name VARCHAR(50) NOT NULL,
    icon VARCHAR(10) DEFAULT '✨',
    description VARCHAR(100),
    prompt TEXT NOT NULL,
    greeting VARCHAR(200),
    language VARCHAR(10) DEFAULT 'zh-CN',
    created_at TIMESTAMP NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMP NOT NULL DEFAULT NOW(),

    CONSTRAINT unique_user_scenario UNIQUE(user_id, name),
    CONSTRAINT check_name_length CHECK (char_length(name) >= 2 AND char_length(name) <= 50),
    CONSTRAINT check_description_length CHECK (description IS NULL OR (char_length(description) >= 1 AND char_length(description) <= 100)),
    CONSTRAINT check_prompt_length CHECK (char_length(prompt) >= 10 AND char_length(prompt) <= 2000)
);

-- 为用户 ID 创建索引，加速查询
CREATE INDEX idx_user_scenarios_user_id ON user_scenarios(user_id);

-- 为创建时间创建索引，用于排序
CREATE INDEX idx_user_scenarios_created_at ON user_scenarios(created_at DESC);

COMMENT ON TABLE user_scenarios IS '用户自建情景表';
COMMENT ON COLUMN user_scenarios.id IS '情景唯一标识';
COMMENT ON COLUMN user_scenarios.user_id IS '所属用户 ID，外键关联 users 表';
COMMENT ON COLUMN user_scenarios.name IS '情景名称，如"创意写作导师"';
COMMENT ON COLUMN user_scenarios.icon IS 'Emoji 图标，如"🎨"';
COMMENT ON COLUMN user_scenarios.description IS '简短描述，可选，显示在情景卡片上';
COMMENT ON COLUMN user_scenarios.prompt IS '角色 System Prompt，定义 AI 行为';
COMMENT ON COLUMN user_scenarios.greeting IS '首句引导，可选';
COMMENT ON COLUMN user_scenarios.language IS '默认语言，如 zh-CN、en-US';
