CREATE DATABASE hikvision_api;

USE hikvision_api;

CREATE TABLE IF NOT EXISTS clientes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  client_id VARCHAR(64) NOT NULL UNIQUE,   -- identificador publico del cliente
  nombre VARCHAR(128) NOT NULL,            -- nombre descriptivo
  secret_hash VARCHAR(128) NOT NULL,       -- hash del secreto (en texto: hex o base64)
  scopes TEXT NULL,                        -- opcional: "users:read,users:write,events:read"
  activo TINYINT(1) NOT NULL DEFAULT 1,    -- 1 = habilitado
  creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS lector_modelos (
  id              INT AUTO_INCREMENT PRIMARY KEY,
  fabricante      VARCHAR(64)  NOT NULL,     -- ej: 'Hikvision'
  nombre_modelo   VARCHAR(64)  NOT NULL,     -- ej: 'DS-K1T341', 'MinMoe', etc.
  handler_code    VARCHAR(64)  NOT NULL,     -- ej: 'hikvision_minmoe' (nombre logico para elegir el driver)
  isapi_events    VARCHAR(128) NOT NULL,     -- ej: '/ISAPI/AccessControl/AcsEvent?format=json'
  isapi_user_add  VARCHAR(128) DEFAULT NULL, -- ej: '/ISAPI/AccessControl/UserInfo/Record?format=json'
  isapi_user_mod  VARCHAR(128) DEFAULT NULL, -- ej: '/ISAPI/AccessControl/UserInfo/Modify?format=json'
  isapi_user_del  VARCHAR(128) DEFAULT NULL, -- ej: '/ISAPI/AccessControl/UserInfo/Delete?format=json'
  minor_card      INT          DEFAULT 1,    -- mapeos por defecto
  minor_facial    INT          DEFAULT 75,
  minor_finger    INT          DEFAULT 38,
  observaciones   TEXT         NULL,
  activo TINYINT(1) NOT NULL DEFAULT 1,    -- 1 = habilitado
  creado       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_modelo (fabricante, nombre_modelo, handler_code)
) ENGINE=InnoDB;

INSERT INTO lector_modelos
(fabricante, nombre_modelo, handler_code,
 isapi_events, isapi_user_add, isapi_user_mod, isapi_user_del,
 minor_card, minor_facial, minor_finger, observaciones)
VALUES
('Hikvision', 'MinMoe DS-K1T342MFWX-E1', 'hikvision_minmoe',
 '/ISAPI/AccessControl/AcsEvent?format=json',
 '/ISAPI/AccessControl/UserInfo/Record?format=json',
 '/ISAPI/AccessControl/UserInfo/Modify?format=json',
 '/ISAPI/AccessControl/UserInfo/Delete?format=json',
 1, 75, 38,
 'Modelo MinMoe común; Auth Digest; eventos AccessControl.');

CREATE TABLE IF NOT EXISTS lectores (
  id            INT AUTO_INCREMENT PRIMARY KEY,
  cliente_id    INT           NOT NULL,       -- FK a tu tabla de clientes/tenants del sistema (la que ya usas)
  nombre        VARCHAR(128)  NOT NULL,       -- alias amigable para UI
  ip            VARCHAR(64)   NOT NULL,
  puerto        INT           NOT NULL,
  protocolo     ENUM('http','https') NOT NULL DEFAULT 'http',
  auth_tipo     ENUM('BASIC','DIGEST') NOT NULL DEFAULT 'DIGEST',
  usuario       VARCHAR(128)  NOT NULL,
  clave         VARCHAR(256)  NOT NULL,       -- ver nota de seguridad abajo
  modelo_id     INT           NOT NULL,       -- FK -> lector_modelos.id
  tz_offset     VARCHAR(6)    DEFAULT '-03:00', -- ej: '-03:00' para formatear start/end si faltan
  timeout_seg   INT           NOT NULL DEFAULT 3,
  activo        TINYINT(1)    NOT NULL DEFAULT 1,
  ultimo_ping   DATETIME      NULL,
  creado        TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  actualizado   TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  CONSTRAINT fk_lectores_modelo
  FOREIGN KEY (modelo_id) REFERENCES lector_modelos(id),

  UNIQUE KEY uq_cliente_ip_puerto (cliente_id, ip, puerto),
  KEY idx_cliente_activo (cliente_id, activo)
) ENGINE=InnoDB;


INSERT INTO lectores(cliente_id, nombre, ip, puerto, protocolo, auth_tipo, usuario, clave, modelo_id, tz_offset, timeout_seg, activo)
VALUES (1, 'MinMoe Recepcion', '192.168.168.123', 80, 'http', 'DIGEST', 'admin', 'pass', 1, '-03:00', 10, 1);