-- Módulo asistencia: contratistas, trabajadores, asistencias
-- Ejecutar sobre la misma base que la app (ej. rpm_asistencia).

CREATE TABLE IF NOT EXISTS contratistas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(150) NOT NULL,
  ruc VARCHAR(20) NOT NULL UNIQUE,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS trabajadores (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(150) NOT NULL,
  dni VARCHAR(20) NOT NULL UNIQUE,
  contratista_id INT NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_trabajador_contratista FOREIGN KEY (contratista_id) REFERENCES contratistas(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS asistencias (
  id INT AUTO_INCREMENT PRIMARY KEY,
  trabajador_id INT NOT NULL,
  contratista_id INT NOT NULL,
  fecha_hora DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  tipo ENUM('entrada','salida') NOT NULL,
  foto VARCHAR(500) NOT NULL,
  CONSTRAINT fk_asistencia_trabajador FOREIGN KEY (trabajador_id) REFERENCES trabajadores(id) ON DELETE CASCADE,
  CONSTRAINT fk_asistencia_contratista FOREIGN KEY (contratista_id) REFERENCES contratistas(id) ON DELETE RESTRICT,
  KEY idx_asistencia_trabajador_fecha (trabajador_id, fecha_hora)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Datos de ejemplo
INSERT INTO contratistas (nombre, ruc) VALUES ('RGM Constructora SAC', '20123456789')
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

INSERT INTO trabajadores (nombre, dni, contratista_id)
SELECT 'Juan Pérez García', '12345678', id FROM contratistas WHERE ruc = '20123456789' LIMIT 1
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre), contratista_id = VALUES(contratista_id);

INSERT INTO trabajadores (nombre, dni, contratista_id)
SELECT 'María López Díaz', '87654321', id FROM contratistas WHERE ruc = '20123456789' LIMIT 1
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre), contratista_id = VALUES(contratista_id);
