/* ==========================================================
   MÓDULO CONTROL DE ACCESO - PHP MVC SENCILLO SIN POO/PDO
   Compatible con tabla principal: instructor
   ========================================================== */

/* 1. Roles requeridos */
INSERT INTO rol (Id_Rol, Rol)
SELECT 8, 'Vigilante'
WHERE NOT EXISTS (SELECT 1 FROM rol WHERE Id_Rol = 8);

INSERT INTO rol (Id_Rol, Rol)
SELECT 9, 'Visitante'
WHERE NOT EXISTS (SELECT 1 FROM rol WHERE Id_Rol = 9);

/* 2. Biometría básica: huella/código externo y foto base de rostro */
CREATE TABLE IF NOT EXISTS ca_biometria (
  Id_Biometria BIGINT(20) NOT NULL AUTO_INCREMENT,
  Id_Instruc BIGINT(20) NOT NULL,
  Tipo ENUM('HUELLA','ROSTRO') NOT NULL,
  Codigo_Huella VARCHAR(255) DEFAULT NULL,
  Foto_Rostro VARCHAR(255) DEFAULT NULL,
  Activo TINYINT(1) NOT NULL DEFAULT 1,
  Fecha_Reg DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  Id_User_Reg BIGINT(20) DEFAULT NULL,
  PRIMARY KEY (Id_Biometria),
  KEY idx_ca_bio_instruc (Id_Instruc),
  KEY idx_ca_bio_codigo (Codigo_Huella),
  CONSTRAINT fk_ca_bio_instruc FOREIGN KEY (Id_Instruc) REFERENCES instructor(Id_Instruc) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/* 3. Registro de ingreso/salida */
CREATE TABLE IF NOT EXISTS ca_registro_acceso (
  Id_Registro BIGINT(20) NOT NULL AUTO_INCREMENT,
  Id_Instruc BIGINT(20) NOT NULL,
  Id_Rol_Acceso BIGINT(20) DEFAULT NULL,
  Id_Centro BIGINT(20) DEFAULT NULL,
  Fecha_Ingreso DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  Fecha_Salida DATETIME DEFAULT NULL,
  Metodo_Ingreso ENUM('CAMARA','HUELLA','MANUAL','MIXTO') NOT NULL DEFAULT 'MANUAL',
  Metodo_Salida ENUM('CAMARA','HUELLA','MANUAL','MIXTO') DEFAULT NULL,
  Foto_Ingreso VARCHAR(255) DEFAULT NULL,
  Foto_Salida VARCHAR(255) DEFAULT NULL,
  Id_Guarda_Ingreso BIGINT(20) DEFAULT NULL,
  Id_Guarda_Salida BIGINT(20) DEFAULT NULL,
  Estado ENUM('DENTRO','SALIO') NOT NULL DEFAULT 'DENTRO',
  Observacion VARCHAR(1000) DEFAULT NULL,
  Ip VARCHAR(80) DEFAULT NULL,
  User_Agent VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (Id_Registro),
  KEY idx_ca_reg_persona (Id_Instruc),
  KEY idx_ca_reg_estado (Estado),
  KEY idx_ca_reg_centro (Id_Centro),
  KEY idx_ca_reg_fechas (Fecha_Ingreso, Fecha_Salida),
  CONSTRAINT fk_ca_reg_instruc FOREIGN KEY (Id_Instruc) REFERENCES instructor(Id_Instruc) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_ca_reg_rol FOREIGN KEY (Id_Rol_Acceso) REFERENCES rol(Id_Rol) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/* 4. Equipos o materiales */
CREATE TABLE IF NOT EXISTS ca_equipo (
  Id_Equipo BIGINT(20) NOT NULL AUTO_INCREMENT,
  Codigo_Equipo VARCHAR(80) NOT NULL,
  Id_Instruc BIGINT(20) DEFAULT NULL,
  Id_Centro BIGINT(20) DEFAULT NULL,
  Tipo_Equipo VARCHAR(100) NOT NULL,
  Nombre_Equipo VARCHAR(150) DEFAULT NULL,
  Marca VARCHAR(100) DEFAULT NULL,
  Modelo VARCHAR(100) DEFAULT NULL,
  Serial VARCHAR(120) DEFAULT NULL,
  Color VARCHAR(80) DEFAULT NULL,
  Descripcion VARCHAR(1000) DEFAULT NULL,
  Fecha_Reg DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  Id_Guarda_Reg BIGINT(20) DEFAULT NULL,
  Activo TINYINT(1) NOT NULL DEFAULT 1,
  PRIMARY KEY (Id_Equipo),
  UNIQUE KEY uk_ca_equipo_codigo (Codigo_Equipo),
  KEY idx_ca_equipo_persona (Id_Instruc),
  KEY idx_ca_equipo_centro (Id_Centro),
  CONSTRAINT fk_ca_equipo_instruc FOREIGN KEY (Id_Instruc) REFERENCES instructor(Id_Instruc) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/* 5. Relación del equipo/material con cada ingreso/salida */
CREATE TABLE IF NOT EXISTS ca_registro_equipo (
  Id_Registro_Equipo BIGINT(20) NOT NULL AUTO_INCREMENT,
  Id_Registro BIGINT(20) NOT NULL,
  Id_Equipo BIGINT(20) NOT NULL,
  Entra TINYINT(1) NOT NULL DEFAULT 1,
  Sale TINYINT(1) NOT NULL DEFAULT 0,
  Fecha_Entra DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  Fecha_Sale DATETIME DEFAULT NULL,
  PRIMARY KEY (Id_Registro_Equipo),
  KEY idx_ca_re_registro (Id_Registro),
  KEY idx_ca_re_equipo (Id_Equipo),
  CONSTRAINT fk_ca_re_registro FOREIGN KEY (Id_Registro) REFERENCES ca_registro_acceso(Id_Registro) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_ca_re_equipo FOREIGN KEY (Id_Equipo) REFERENCES ca_equipo(Id_Equipo) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/* 6. Opcional: mejorar búsqueda por documento */
ALTER TABLE instructor ADD INDEX IF NOT EXISTS idx_instructor_num_ced (Num_Ced);
