-- 重建企业卡授权表（替换 000010 中的旧版结构，字段从 iot_card_id 改为 card_id，移除 shop_id/status，新增 authorizer_type/revoked_by/revoked_at/remark）
DROP TABLE IF EXISTS tb_enterprise_card_authorization;

CREATE TABLE tb_enterprise_card_authorization (
    -- 基础字段
    id BIGSERIAL PRIMARY KEY,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP DEFAULT NULL,
    
    -- 授权关系
    enterprise_id BIGINT NOT NULL,     -- 被授权企业ID
    card_id BIGINT NOT NULL,           -- 被授权卡ID
    
    -- 授权信息
    authorized_by BIGINT NOT NULL,     -- 授权人账号ID
    authorized_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 授权时间
    authorizer_type SMALLINT NOT NULL, -- 授权人类型：2=平台用户 3=代理账号
    
    -- 回收信息
    revoked_by BIGINT DEFAULT NULL,    -- 回收人账号ID（NULL表示未回收）
    revoked_at TIMESTAMP DEFAULT NULL, -- 回收时间（NULL表示未回收）
    
    -- 备注信息
    remark VARCHAR(500) DEFAULT ''      -- 授权备注
);

-- 添加表注释
COMMENT ON TABLE tb_enterprise_card_authorization IS '企业卡授权表';
COMMENT ON COLUMN tb_enterprise_card_authorization.id IS '主键ID';
COMMENT ON COLUMN tb_enterprise_card_authorization.created_at IS '创建时间';
COMMENT ON COLUMN tb_enterprise_card_authorization.updated_at IS '更新时间';
COMMENT ON COLUMN tb_enterprise_card_authorization.deleted_at IS '删除时间';
COMMENT ON COLUMN tb_enterprise_card_authorization.enterprise_id IS '被授权企业ID';
COMMENT ON COLUMN tb_enterprise_card_authorization.card_id IS '被授权卡ID';
COMMENT ON COLUMN tb_enterprise_card_authorization.authorized_by IS '授权人账号ID';
COMMENT ON COLUMN tb_enterprise_card_authorization.authorized_at IS '授权时间';
COMMENT ON COLUMN tb_enterprise_card_authorization.authorizer_type IS '授权人类型：2=平台用户 3=代理账号';
COMMENT ON COLUMN tb_enterprise_card_authorization.revoked_by IS '回收人账号ID';
COMMENT ON COLUMN tb_enterprise_card_authorization.revoked_at IS '回收时间';
COMMENT ON COLUMN tb_enterprise_card_authorization.remark IS '授权备注';

-- 创建索引
-- 1. 企业ID + 回收时间的联合索引（查询企业的有效授权）
CREATE INDEX idx_enterprise_revoked ON tb_enterprise_card_authorization(enterprise_id, revoked_at);

-- 2. 卡ID索引（查询某张卡的授权情况）
CREATE INDEX idx_card_authorization ON tb_enterprise_card_authorization(card_id);

-- 3. 软删除索引
CREATE INDEX idx_eca_deleted_at ON tb_enterprise_card_authorization(deleted_at);

-- 4. 授权人索引（查询某人的授权记录）
CREATE INDEX idx_eca_authorized_by ON tb_enterprise_card_authorization(authorized_by);