-- 000006: PPT 生成任务表

CREATE TABLE ppt_tasks (
    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id         UUID NOT NULL REFERENCES users(id),
    app_id          UUID REFERENCES applications(id),

    -- 任务输入
    title           VARCHAR(200) NOT NULL,
    source_type     VARCHAR(20) NOT NULL DEFAULT 'text'
                    CHECK (source_type IN ('text', 'file', 'url')),
    source_content  TEXT,                          -- 文本内容或 URL
    source_file     TEXT,                          -- 上传文件路径
    
    -- 生成配置
    config          JSONB NOT NULL DEFAULT '{}',
    -- config 结构:
    -- {
    --   "format": "ppt169",          -- 画布格式
    --   "page_count": 10,            -- 目标页数
    --   "style": "general",          -- 风格: general/consultant/consultant-top
    --   "color_scheme": "",          -- 配色方案（可选）
    --   "language": "zh",            -- 语言
    --   "with_images": true,         -- 是否生成图片
    --   "image_backend": "gpt-image-2"  -- 图片生成后端
    -- }

    -- 任务状态
    status          VARCHAR(30) NOT NULL DEFAULT 'pending'
                    CHECK (status IN (
                        'pending',           -- 等待处理
                        'processing',        -- 处理中
                        'converting',        -- 转换源文件
                        'designing',         -- 策略师阶段
                        'generating_images', -- 图片生成阶段
                        'generating_svg',    -- SVG 生成阶段
                        'exporting',         -- 导出 PPTX 阶段
                        'completed',         -- 完成
                        'failed'             -- 失败
                    )),
    progress        INTEGER NOT NULL DEFAULT 0 CHECK (progress BETWEEN 0 AND 100),
    status_message  TEXT,                          -- 当前状态描述
    error_message   TEXT,                          -- 错误信息

    -- 输出
    output_file     TEXT,                          -- 生成的 PPTX 文件路径
    output_preview  JSONB DEFAULT '[]',            -- SVG 预览图路径列表
    page_count      INTEGER,                       -- 实际生成页数
    project_path    TEXT,                          -- PPT Master 项目路径

    -- 时间戳
    started_at      TIMESTAMPTZ,
    completed_at    TIMESTAMPTZ,
    created_at      TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at      TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX idx_ppt_tasks_user ON ppt_tasks(user_id);
CREATE INDEX idx_ppt_tasks_status ON ppt_tasks(status);
CREATE INDEX idx_ppt_tasks_created ON ppt_tasks(created_at DESC);

CREATE TRIGGER update_ppt_tasks_updated_at
    BEFORE UPDATE ON ppt_tasks
    FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
