-- Package 表扩展：新增周期类型、流量重置周期、实名激活开关
ALTER TABLE tb_package
ADD COLUMN IF NOT EXISTS calendar_type VARCHAR(20) DEFAULT 'by_day',
ADD COLUMN IF NOT EXISTS duration_days INT,
ADD COLUMN IF NOT EXISTS data_reset_cycle VARCHAR(20) DEFAULT 'monthly',
ADD COLUMN IF NOT EXISTS enable_realname_activation BOOLEAN DEFAULT TRUE;

-- PackageUsage 表扩展：新增优先级、主套餐关联、独立有效期、实名激活等字段
-- 注：status 字段枚举值扩展为 0-4（0=待生效，1=生效中，2=已用完，3=已过期，4=已失效）
ALTER TABLE tb_package_usage
ADD COLUMN IF NOT EXISTS priority INT DEFAULT 1,
ADD COLUMN IF NOT EXISTS master_usage_id BIGINT,
ADD COLUMN IF NOT EXISTS has_independent_expiry BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS pending_realname_activation BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS data_reset_cycle VARCHAR(20),
ADD COLUMN IF NOT EXISTS last_reset_at TIMESTAMP,
ADD COLUMN IF NOT EXISTS next_reset_at TIMESTAMP;

-- IotCard 表扩展：新增首次实名时间、停复机相关字段
ALTER TABLE tb_iot_card
ADD COLUMN IF NOT EXISTS first_realname_at TIMESTAMP,
ADD COLUMN IF NOT EXISTS stopped_at TIMESTAMP,
ADD COLUMN IF NOT EXISTS resumed_at TIMESTAMP,
ADD COLUMN IF NOT EXISTS stop_reason VARCHAR(50);

-- Carrier 表扩展：新增计费日字段（联通27号，其他1号）
ALTER TABLE tb_carrier
ADD COLUMN IF NOT EXISTS billing_day INT DEFAULT 1;

-- 创建 PackageUsageDailyRecord 表：套餐流量日记录
CREATE TABLE IF NOT EXISTS tb_package_usage_daily_record (
    id BIGSERIAL PRIMARY KEY,
    package_usage_id BIGINT NOT NULL,
    date DATE NOT NULL,
    daily_usage_mb INT DEFAULT 0,
    cumulative_usage_mb BIGINT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建 CardDailyUsage 表：卡流量日记录（用于轮询系统）
CREATE TABLE IF NOT EXISTS tb_card_daily_usage (
    id BIGSERIAL PRIMARY KEY,
    card_id BIGINT NOT NULL,
    usage_date DATE NOT NULL,
    total_data_usage BIGINT DEFAULT 0,
    carrier_id BIGINT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建索引
-- PackageUsage 表索引
CREATE INDEX IF NOT EXISTS idx_package_usage_priority ON tb_package_usage(priority);
CREATE INDEX IF NOT EXISTS idx_package_usage_master_usage_id ON tb_package_usage(master_usage_id);
CREATE INDEX IF NOT EXISTS idx_package_usage_next_reset_at ON tb_package_usage(next_reset_at);

-- PackageUsageDailyRecord 表唯一索引（同一套餐同一天只有一条记录）
CREATE UNIQUE INDEX IF NOT EXISTS idx_package_usage_daily_record_unique ON tb_package_usage_daily_record(package_usage_id, date);
CREATE INDEX IF NOT EXISTS idx_package_usage_daily_record_date ON tb_package_usage_daily_record(date);

-- CardDailyUsage 表唯一索引（同一卡同一天只有一条记录）
CREATE UNIQUE INDEX IF NOT EXISTS idx_card_daily_usage_unique ON tb_card_daily_usage(card_id, usage_date);
CREATE INDEX IF NOT EXISTS idx_card_daily_usage_date ON tb_card_daily_usage(usage_date);

-- 数据初始化：设置运营商的 billing_day
-- 联通（假设 carrier_name 或 carrier_code 包含 "unicom" 或 "联通"）
UPDATE tb_carrier
SET billing_day = 27
WHERE LOWER(carrier_name) LIKE '%unicom%' OR carrier_name LIKE '%联通%';

-- 其他运营商默认为 1 号（已通过 DEFAULT 设置）

-- 添加字段注释（PostgreSQL 语法）
-- Package 表字段注释
COMMENT ON COLUMN tb_package.calendar_type IS '套餐周期类型（natural_month=自然月，by_day=按天）';
COMMENT ON COLUMN tb_package.duration_days IS '套餐天数（calendar_type=by_day 时必填）';
COMMENT ON COLUMN tb_package.data_reset_cycle IS '流量重置周期（daily/monthly/yearly/none）';
COMMENT ON COLUMN tb_package.enable_realname_activation IS '是否启用实名激活（true=需实名后激活，false=立即激活）';

-- PackageUsage 表字段注释
COMMENT ON COLUMN tb_package_usage.priority IS '优先级（主套餐和加油包都按此字段排队，数字越小优先级越高）';
COMMENT ON COLUMN tb_package_usage.master_usage_id IS '主套餐使用记录ID（加油包关联主套餐，主套餐此字段为NULL）';
COMMENT ON COLUMN tb_package_usage.has_independent_expiry IS '加油包是否有独立有效期（true=有独立到期时间，false=跟随主套餐）';
COMMENT ON COLUMN tb_package_usage.pending_realname_activation IS '是否等待实名激活（true=待实名后激活，false=已激活或不需实名）';
COMMENT ON COLUMN tb_package_usage.data_reset_cycle IS '流量重置周期（从 Package 复制，用于历史记录）';
COMMENT ON COLUMN tb_package_usage.last_reset_at IS '最后一次流量重置时间';
COMMENT ON COLUMN tb_package_usage.next_reset_at IS '下次流量重置时间（用于定时任务查询）';

-- IotCard 表字段注释
COMMENT ON COLUMN tb_iot_card.first_realname_at IS '首次实名时间（用于触发首次实名激活）';
COMMENT ON COLUMN tb_iot_card.stopped_at IS '停机时间';
COMMENT ON COLUMN tb_iot_card.resumed_at IS '最近复机时间';
COMMENT ON COLUMN tb_iot_card.stop_reason IS '停机原因（traffic_exhausted=流量耗尽，manual=手动停机，arrears=欠费）';

-- Carrier 表字段注释
COMMENT ON COLUMN tb_carrier.billing_day IS '运营商计费日（用于流量查询接口的计费周期计算，联通=27，其他=1）';

-- PackageUsageDailyRecord 表和字段注释
COMMENT ON TABLE tb_package_usage_daily_record IS '套餐流量日记录';
COMMENT ON COLUMN tb_package_usage_daily_record.package_usage_id IS '套餐使用记录ID';
COMMENT ON COLUMN tb_package_usage_daily_record.date IS '日期';
COMMENT ON COLUMN tb_package_usage_daily_record.daily_usage_mb IS '当日流量使用量（MB）';
COMMENT ON COLUMN tb_package_usage_daily_record.cumulative_usage_mb IS '截止当日的累计流量（MB）';

-- CardDailyUsage 表和字段注释
COMMENT ON TABLE tb_card_daily_usage IS '卡流量日记录';
COMMENT ON COLUMN tb_card_daily_usage.card_id IS '卡ID（可能是 iot_card_id 或 device_id）';
COMMENT ON COLUMN tb_card_daily_usage.usage_date IS '日期';
COMMENT ON COLUMN tb_card_daily_usage.total_data_usage IS '上游返回的累计流量（MB）';
COMMENT ON COLUMN tb_card_daily_usage.carrier_id IS '运营商ID';
