-- ============================================
-- 套餐与课程包表结构
-- ============================================
-- Flyway 版本：V2
-- 数据库：MySQL 8.0+
-- 字符集：utf8mb4
-- 创建日期：2026-03-11
--
-- 说明：套餐与课程包重构
-- - 新增套餐表 t_product_bundle
-- - 新增套餐 - 课程包关联表 t_product_bundle_course_package
-- - 新增课程包 - 课程关联表 t_course_package_course
-- - 新增学校套餐购买记录表 t_tenant_product_bundle
-- - 修改课程包表 t_course_package（移除商业字段）
-- ============================================

USE reading_platform;

-- ============================================
-- 套餐表（新增）
-- ============================================

CREATE TABLE IF NOT EXISTS t_product_bundle (
    id VARCHAR(32) PRIMARY KEY COMMENT '套餐 ID',
    name VARCHAR(100) NOT NULL COMMENT '套餐名称',
    description VARCHAR(500) COMMENT '套餐描述',
    cover_url VARCHAR(500) COMMENT '封面图片 URL',
    price INT COMMENT '价格（分）',
    discount_price INT COMMENT '优惠价（分）',
    discount_type VARCHAR(20) COMMENT '优惠类型：PERCENT-折扣/FIXED-立减',
    grade_levels VARCHAR(100) COMMENT '适用年级（JSON 数组）',
    status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态：DRAFT, PENDING_REVIEW, APPROVED, REJECTED, PUBLISHED, OFFLINE',
    course_package_count INT DEFAULT 0 COMMENT '课程包数量',
    tenant_count INT DEFAULT 0 COMMENT '使用学校数',
    published_at DATETIME COMMENT '发布时间',
    is_system TINYINT DEFAULT 0 COMMENT '是否系统套餐 0-否 1-是',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted TINYINT DEFAULT 0 COMMENT '是否删除 0-未删除 1-已删除',
    created_by VARCHAR(64) COMMENT '创建人用户名',
    updated_by VARCHAR(64) COMMENT '更新人用户名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品套餐';

-- ============================================
-- 套餐 - 课程包关联表（新增）
-- ============================================

CREATE TABLE IF NOT EXISTS t_product_bundle_course_package (
    id VARCHAR(32) PRIMARY KEY COMMENT '关联 ID',
    product_bundle_id VARCHAR(32) NOT NULL COMMENT '套餐 ID',
    course_package_id VARCHAR(32) NOT NULL COMMENT '课程包 ID',
    grade_level VARCHAR(20) COMMENT '适用年级',
    sort_order INT DEFAULT 0 COMMENT '排序',
    created_by VARCHAR(64) COMMENT '创建人用户名',
    updated_by VARCHAR(64) COMMENT '更新人用户名',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted TINYINT DEFAULT 0 COMMENT '是否删除 0-未删除 1-已删除',
    UNIQUE KEY uk_bundle_package (product_bundle_id, course_package_id),
    INDEX idx_product_bundle (product_bundle_id),
    INDEX idx_course_package (course_package_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐课程包关联';

-- ============================================
-- 课程包 - 课程关联表（新增）
-- ============================================

CREATE TABLE IF NOT EXISTS t_course_package_course (
    id VARCHAR(32) PRIMARY KEY COMMENT '关联 ID',
    course_package_id VARCHAR(32) NOT NULL COMMENT '课程包 ID',
    course_id VARCHAR(32) NOT NULL COMMENT '课程 ID',
    sort_order INT DEFAULT 0 COMMENT '排序',
    created_by VARCHAR(64) COMMENT '创建人用户名',
    updated_by VARCHAR(64) COMMENT '更新人用户名',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted TINYINT DEFAULT 0 COMMENT '是否删除 0-未删除 1-已删除',
    UNIQUE KEY uk_package_course (course_package_id, course_id),
    INDEX idx_course_package (course_package_id),
    INDEX idx_course (course_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程包课程关联';

-- ============================================
-- 学校套餐购买记录表（新增）
-- ============================================

CREATE TABLE IF NOT EXISTS t_tenant_product_bundle (
    id VARCHAR(32) PRIMARY KEY COMMENT '购买记录 ID',
    tenant_id VARCHAR(32) NOT NULL COMMENT '租户 ID',
    product_bundle_id VARCHAR(32) NOT NULL COMMENT '套餐 ID',
    start_date DATETIME NOT NULL COMMENT '开始日期',
    end_date DATETIME NOT NULL COMMENT '结束日期',
    status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态：ACTIVE, EXPIRED, SUSPENDED',
    price_paid INT COMMENT '实付价格（分）',
    purchase_time DATETIME COMMENT '购买时间',
    renewed_from VARCHAR(32) COMMENT '续费自原套餐 ID',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted TINYINT DEFAULT 0 COMMENT '是否删除 0-未删除 1-已删除',
    created_by VARCHAR(64) COMMENT '创建人用户名',
    updated_by VARCHAR(64) COMMENT '更新人用户名',
    INDEX idx_tenant (tenant_id),
    INDEX idx_product_bundle (product_bundle_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校套餐购买记录';

-- ============================================
-- 外键约束（可选，根据业务需求决定是否添加）
-- ============================================
