-- ============================================
-- 用户优惠券表 (agent.dbo.user_coupons)
-- SQL Server DDL
-- ============================================

IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='user_coupons' AND xtype='U')
BEGIN
    CREATE TABLE agent.dbo.user_coupons (
        id              INT IDENTITY(1,1) PRIMARY KEY,
        user_id         INT NOT NULL,                           -- 用户ID
        coupon_name     VARCHAR(50) NOT NULL,                   -- 优惠券名称 (e.g. new_user_bonus)
        coupon_type     TINYINT NOT NULL DEFAULT 1,             -- 类型: 1=固定金额, 2=充值百分比
        coupon_value    DECIMAL(10,2) NOT NULL DEFAULT 0,       -- 优惠值 (元 or %)
        min_recharge    DECIMAL(10,2) NOT NULL DEFAULT 0,       -- 最低充值门槛(元)
        max_bonus       DECIMAL(10,2) NOT NULL DEFAULT 0,       -- 最大赠送上限(元), 百分比券使用
        bonus_coins     INT NOT NULL DEFAULT 0,                 -- 实际赠送金币(分)
        order_sn        VARCHAR(64) NOT NULL DEFAULT '',        -- 关联订单号
        status          TINYINT NOT NULL DEFAULT 0,             -- 0=未使用, 1=已使用, 2=已过期
        issued_at       DATETIME NULL,                          -- 发放时间
        used_at         DATETIME NULL,                          -- 使用时间
        expire_at       DATETIME NULL,                          -- 过期时间
    );

    -- 索引: 用户+状态查询（获取可用优惠券列表）
    CREATE INDEX idx_user_coupons_user_status ON agent.dbo.user_coupons (user_id, status, expire_at);

    -- 索引: 优惠券名称防重
    CREATE INDEX idx_user_coupons_user_name ON agent.dbo.user_coupons (user_id, coupon_name, status);

    -- 索引: 按订单号查找关联优惠券
    CREATE INDEX idx_user_coupons_order_sn ON agent.dbo.user_coupons (order_sn);
END
GO
