-- =============================================
-- SCRIPT DE INSTALACIÓN PARA FIRMA DIGITAL
-- Ejecutar una vez por cada base de datos nueva
-- =============================================

-- 1. Crear tabla para almacenar los certificados
CREATE TABLE IF NOT EXISTS `certificados_medicos` (
  `idcertificado` int(11) NOT NULL AUTO_INCREMENT,
  `idempleado` int(11) NOT NULL,
  `nombre_certificado` varchar(255) NOT NULL,
  `ruta_certificado` varchar(255) NOT NULL COMMENT 'Ruta al archivo .p12 encriptado',
  `fecha_emision` date DEFAULT NULL,
  `fecha_vencimiento` date NOT NULL,
  `estado` enum('activo','vencido','revocado') DEFAULT 'activo',
  `fecha_registro` datetime DEFAULT CURRENT_TIMESTAMP,
  `ultimo_uso` datetime DEFAULT NULL,
  PRIMARY KEY (`idcertificado`),
  KEY `fk_certificado_empleado` (`idempleado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 2. Modificar tabla receta para guardar la firma
-- Usamos procedures para evitar errores si las columnas ya existen
DROP PROCEDURE IF EXISTS upgrade_receta_firma;

DELIMITER //
CREATE PROCEDURE upgrade_receta_firma()
BEGIN
    -- Agregar columna firmado
    IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'receta' AND COLUMN_NAME = 'firmado') THEN
        ALTER TABLE `receta` ADD COLUMN `firmado` tinyint(1) DEFAULT 0 COMMENT '0=No firmado, 1=Firmado';
        CREATE INDEX idx_receta_firmado ON `receta`(`firmado`);
    END IF;

    -- Agregar columna fecha_firma
    IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'receta' AND COLUMN_NAME = 'fecha_firma') THEN
        ALTER TABLE `receta` ADD COLUMN `fecha_firma` datetime DEFAULT NULL;
    END IF;

    -- Agregar columna ruta_pdf_firmado
    IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'receta' AND COLUMN_NAME = 'ruta_pdf_firmado') THEN
        ALTER TABLE `receta` ADD COLUMN `ruta_pdf_firmado` varchar(255) DEFAULT NULL;
    END IF;

    -- Agregar columna idempleado_firma
    IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'receta' AND COLUMN_NAME = 'idempleado_firma') THEN
        ALTER TABLE `receta` ADD COLUMN `idempleado_firma` int(11) DEFAULT NULL;
    END IF;
END //
DELIMITER ;

CALL upgrade_receta_firma();
DROP PROCEDURE upgrade_receta_firma;

-- Fin del script
