-- ============================================================
-- AIoT 方案B升级脚本 - Redis+MQTT混合对接
-- 新增表：config_snapshot, alert, edge_device, algo_template
-- 修改表：roi_algo_bind 新增 template_id, param_override
-- ============================================================

-- 1. 配置版本快照表
CREATE TABLE IF NOT EXISTS wvp_ai_config_snapshot (
    id          BIGINT PRIMARY KEY AUTO_INCREMENT,
    version     INT NOT NULL                     COMMENT '自增版本号',
    scope_type  VARCHAR(20) NOT NULL             COMMENT 'CAMERA|ROI|BIND',
    scope_id    VARCHAR(64) NOT NULL             COMMENT 'camera_id/roi_id/bind_id',
    camera_id   VARCHAR(64) NOT NULL             COMMENT '所属摄像头',
    snapshot    LONGTEXT NOT NULL                COMMENT '完整JSON快照',
    change_type VARCHAR(20) NOT NULL             COMMENT 'CREATE|UPDATE|DELETE|ROLLBACK|PUSH',
    change_desc VARCHAR(255) NULL                COMMENT '变更描述',
    created_by  VARCHAR(64) NULL                 COMMENT '操作人',
    created_at  VARCHAR(50) NOT NULL             COMMENT '创建时间',
    INDEX idx_scope (scope_type, scope_id),
    INDEX idx_camera (camera_id),
    INDEX idx_version (scope_type, scope_id, version DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置版本快照';

-- 2. AI告警表
CREATE TABLE IF NOT EXISTS wvp_ai_alert (
    id               BIGINT PRIMARY KEY AUTO_INCREMENT,
    alert_id         VARCHAR(128) NOT NULL        COMMENT '告警唯一ID',
    camera_id        VARCHAR(64) NOT NULL         COMMENT '摄像头ID',
    roi_id           VARCHAR(64) NOT NULL         COMMENT 'ROI区域ID',
    bind_id          VARCHAR(64) NULL             COMMENT '绑定ID',
    alert_type       VARCHAR(50) NOT NULL         COMMENT 'leave_post/intrusion/crowd_detection',
    target_class     VARCHAR(50) NULL             COMMENT '目标类别',
    confidence       DOUBLE NULL                  COMMENT '置信度',
    bbox             VARCHAR(255) NULL            COMMENT 'JSON: [x1,y1,x2,y2]',
    message          TEXT NULL                    COMMENT '告警消息',
    image_path       VARCHAR(255) NULL            COMMENT '告警图片路径',
    duration_minutes DOUBLE NULL                  COMMENT '持续时长(分钟)',
    extra_data       TEXT NULL                    COMMENT 'JSON扩展',
    received_at      VARCHAR(50) NOT NULL         COMMENT '接收时间',
    UNIQUE KEY uk_alert_id (alert_id),
    INDEX idx_camera (camera_id),
    INDEX idx_type (alert_type),
    INDEX idx_time (received_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI告警记录';

-- 3. 边缘设备状态表
CREATE TABLE IF NOT EXISTS wvp_ai_edge_device (
    id               INT PRIMARY KEY AUTO_INCREMENT,
    device_id        VARCHAR(64) NOT NULL         COMMENT '设备唯一ID',
    status           VARCHAR(20) DEFAULT 'offline' COMMENT 'online/offline',
    last_heartbeat   VARCHAR(50) NULL             COMMENT '最后心跳时间',
    uptime_seconds   BIGINT NULL                  COMMENT '运行时长(秒)',
    frames_processed BIGINT NULL                  COMMENT '已处理帧数',
    alerts_generated BIGINT NULL                  COMMENT '已生成告警数',
    stream_stats     TEXT NULL                    COMMENT 'JSON流统计',
    updated_at       VARCHAR(50) NULL             COMMENT '更新时间',
    UNIQUE KEY uk_device_id (device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='边缘设备状态';

-- 4. 算法参数模板表
CREATE TABLE IF NOT EXISTS wvp_ai_algo_template (
    id            INT PRIMARY KEY AUTO_INCREMENT,
    template_id   VARCHAR(64) NOT NULL           COMMENT '模板唯一ID',
    template_name VARCHAR(100) NOT NULL          COMMENT '模板名称',
    algo_code     VARCHAR(50) NOT NULL           COMMENT '关联算法代码',
    params        TEXT NOT NULL                  COMMENT 'JSON参数',
    description   VARCHAR(255) NULL              COMMENT '描述',
    create_time   VARCHAR(50) NULL               COMMENT '创建时间',
    update_time   VARCHAR(50) NULL               COMMENT '更新时间',
    UNIQUE KEY uk_template_id (template_id),
    INDEX idx_algo (algo_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='算法参数模板';

-- 5. wvp_ai_roi_algo_bind 新增模板引用字段
ALTER TABLE wvp_ai_roi_algo_bind
    ADD COLUMN template_id VARCHAR(64) DEFAULT NULL COMMENT '引用的模板ID',
    ADD COLUMN param_override TEXT DEFAULT NULL COMMENT '覆盖模板的局部参数JSON';
