-- ============================================================
-- AIoT 智能视频管理平台 - MySQL 初始化脚本
-- 字段名与 FastAPI 端保持一致（snake_case）
-- ============================================================

-- 1. ROI 区域配置（对应 FastAPI 端 roi_configs）
CREATE TABLE IF NOT EXISTS wvp_ai_roi (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    roi_id          VARCHAR(50)  NOT NULL COMMENT 'UUID，与FastAPI端同步用',
    camera_id       VARCHAR(50)  NOT NULL COMMENT '通道国标编号',
    channel_db_id   INT          NULL     COMMENT 'WVP通道表ID',
    device_id       VARCHAR(50)  NULL     COMMENT '设备国标编号',
    name            VARCHAR(100) NULL     COMMENT 'ROI名称',
    roi_type        VARCHAR(20)  NOT NULL DEFAULT 'rectangle' COMMENT '形状：rectangle/polygon',
    coordinates     TEXT         NOT NULL COMMENT 'JSON归一化坐标',
    color           VARCHAR(20)  NULL     DEFAULT '#FF0000' COMMENT '显示颜色',
    priority        INT          NOT NULL DEFAULT 0 COMMENT '优先级',
    enabled         TINYINT(1)   NOT NULL DEFAULT 1 COMMENT '启用状态',
    extra_params    TEXT         NULL     COMMENT '扩展参数JSON',
    description     VARCHAR(500) NULL     COMMENT '描述',
    create_time     VARCHAR(50)  NULL     COMMENT '创建时间',
    update_time     VARCHAR(50)  NULL     COMMENT '更新时间',
    UNIQUE KEY uk_roi_id (roi_id),
    INDEX idx_camera_id (camera_id),
    INDEX idx_device_id (device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ROI区域配置';

-- 2. 算法注册表（对应 FastAPI 端 algorithm_registry）
CREATE TABLE IF NOT EXISTS wvp_ai_algorithm (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    algo_code       VARCHAR(100) NOT NULL COMMENT '算法编码',
    algo_name       VARCHAR(200) NULL     COMMENT '算法名称',
    target_class    VARCHAR(50)  NULL     COMMENT '目标类别',
    param_schema    TEXT         NULL     COMMENT '参数模板JSON',
    description     VARCHAR(500) NULL     COMMENT '描述',
    is_active       TINYINT(1)   NOT NULL DEFAULT 1 COMMENT '是否可用',
    sync_time       VARCHAR(50)  NULL     COMMENT '最后同步时间',
    create_time     VARCHAR(50)  NULL     COMMENT '创建时间',
    update_time     VARCHAR(50)  NULL     COMMENT '更新时间',
    UNIQUE KEY uk_algo_code (algo_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='算法注册表';

-- 3. ROI 算法绑定（对应 FastAPI 端 roi_algo_bind）
CREATE TABLE IF NOT EXISTS wvp_ai_roi_algo_bind (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    bind_id         VARCHAR(50)  NOT NULL COMMENT 'UUID，同步用',
    roi_id          VARCHAR(50)  NOT NULL COMMENT 'ROI的UUID',
    algo_code       VARCHAR(100) NOT NULL COMMENT '算法编码',
    params          TEXT         NULL     COMMENT '自定义参数JSON',
    priority        INT          NOT NULL DEFAULT 0 COMMENT '优先级',
    enabled         TINYINT(1)   NOT NULL DEFAULT 1 COMMENT '启用状态',
    create_time     VARCHAR(50)  NULL     COMMENT '创建时间',
    update_time     VARCHAR(50)  NULL     COMMENT '更新时间',
    UNIQUE KEY uk_bind_id (bind_id),
    INDEX idx_roi_id (roi_id),
    INDEX idx_algo_code (algo_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ROI算法绑定';

-- 4. 配置变更日志（对应 FastAPI 端 config_update_log）
CREATE TABLE IF NOT EXISTS wvp_ai_config_log (
    id              BIGINT AUTO_INCREMENT PRIMARY KEY,
    config_type     VARCHAR(30)  NOT NULL COMMENT '类型：ROI/ALGORITHM/BIND',
    config_id       VARCHAR(50)  NOT NULL COMMENT '目标ID',
    old_value       TEXT         NULL     COMMENT '变更前JSON',
    new_value       TEXT         NULL     COMMENT '变更后JSON',
    updated_by      VARCHAR(100) NULL     COMMENT '操作人',
    updated_at      VARCHAR(50)  NULL     COMMENT '操作时间',
    INDEX idx_config_type (config_type),
    INDEX idx_config_id (config_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置变更日志';

-- ============================================================
-- 初始数据：预置算法（2个，不含人群聚集检测）
-- ============================================================
INSERT INTO wvp_ai_algorithm (algo_code, algo_name, target_class, param_schema, description, is_active, create_time, update_time) VALUES
('leave_post', '离岗检测', 'person', '{"confirm_on_duty_sec":{"type":"int","default":10,"min":1},"confirm_leave_sec":{"type":"int","default":10,"min":1},"cooldown_sec":{"type":"int","default":300,"min":0},"working_hours":{"type":"list","default":[]}}', '检测人员是否在岗，支持工作时间段配置', 1, NOW(), NOW()),
('intrusion', '周界入侵检测', 'person', '{"cooldown_seconds":{"type":"int","default":120,"min":0},"confirm_seconds":{"type":"int","default":5,"min":1}}', '检测人员进入指定区域', 1, NOW(), NOW());
