CREATE TABLE IF NOT EXISTS `inv_categorias` (
  `idcategoria` INT(11) NOT NULL AUTO_INCREMENT,
  `nombre` VARCHAR(100) NOT NULL,
  `descripcion` TEXT,
  `tipo` ENUM('MEDICAMENTO', 'INSUMO', 'EQUIPO', 'MATERIAL', 'OTRO') DEFAULT 'OTRO',
  `estado` TINYINT(1) DEFAULT 1,
  `fecha_creacion` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`idcategoria`),
  UNIQUE KEY `nombre_unique` (`nombre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Categorías de productos';

CREATE TABLE IF NOT EXISTS `inv_proveedores` (
  `idproveedor` INT(11) NOT NULL AUTO_INCREMENT,
  `razon_social` VARCHAR(200) NOT NULL,
  `ruc` VARCHAR(20),
  `contacto` VARCHAR(100),
  `telefono` VARCHAR(20),
  `email` VARCHAR(100),
  `direccion` TEXT,
  `ciudad` VARCHAR(100),
  `observaciones` TEXT,
  `estado` TINYINT(1) DEFAULT 1,
  `fecha_registro` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`idproveedor`),
  KEY `idx_ruc` (`ruc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Proveedores';

CREATE TABLE IF NOT EXISTS `inv_productos` (
  `idproducto` INT(11) NOT NULL AUTO_INCREMENT,
  `codigo` VARCHAR(50) NOT NULL,
  `nombre` VARCHAR(200) NOT NULL,
  `descripcion` TEXT,
  `idcategoria` INT(11),
  `tipo_producto` ENUM('MEDICAMENTO', 'INSUMO', 'EQUIPO', 'MATERIAL', 'SERVICIO') DEFAULT 'INSUMO',
  `principio_activo` VARCHAR(200),
  `concentracion` VARCHAR(100),
  `presentacion` VARCHAR(100),
  `registro_sanitario` VARCHAR(100),
  `requiere_receta` TINYINT(1) DEFAULT 0,
  `stock_actual` DECIMAL(10,2) DEFAULT 0.00,
  `stock_minimo` DECIMAL(10,2) DEFAULT 0.00,
  `stock_maximo` DECIMAL(10,2) DEFAULT 0.00,
  `unidad_medida` VARCHAR(50) DEFAULT 'UNIDAD',
  `precio_compra` DECIMAL(10,2) DEFAULT 0.00,
  `precio_venta` DECIMAL(10,2) DEFAULT 0.00,
  `precio_venta_publico` DECIMAL(10,2) DEFAULT 0.00,
  `ubicacion` VARCHAR(100),
  `lote` VARCHAR(100),
  `fecha_vencimiento` DATE,
  `idproveedor` INT(11),
  `imagen` VARCHAR(255),
  `observaciones` TEXT,
  `estado` TINYINT(1) DEFAULT 1,
  `fecha_registro` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `fecha_modificacion` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`idproducto`),
  UNIQUE KEY `codigo_unique` (`codigo`),
  KEY `idx_nombre` (`nombre`),
  KEY `idx_categoria` (`idcategoria`),
  KEY `idx_tipo` (`tipo_producto`),
  KEY `idx_stock` (`stock_actual`),
  KEY `idx_vencimiento` (`fecha_vencimiento`),
  FOREIGN KEY (`idcategoria`) REFERENCES `inv_categorias`(`idcategoria`) ON DELETE SET NULL,
  FOREIGN KEY (`idproveedor`) REFERENCES `inv_proveedores`(`idproveedor`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Productos del inventario';

CREATE TABLE IF NOT EXISTS `inv_movimientos` (
  `idmovimiento` INT(11) NOT NULL AUTO_INCREMENT,
  `tipo_movimiento` ENUM('ENTRADA', 'SALIDA', 'AJUSTE', 'VENTA', 'DEVOLUCION', 'MERMA', 'TRANSFERENCIA') NOT NULL,
  `numero_documento` VARCHAR(50),
  `fecha_movimiento` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `idproveedor` INT(11),
  `idusuario` INT(11),
  `idatencion` INT(11),
  `total` DECIMAL(10,2) DEFAULT 0.00,
  `observaciones` TEXT,
  `estado` ENUM('PENDIENTE', 'COMPLETADO', 'ANULADO') DEFAULT 'COMPLETADO',
  `fecha_registro` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`idmovimiento`),
  KEY `idx_tipo` (`tipo_movimiento`),
  KEY `idx_fecha` (`fecha_movimiento`),
  KEY `idx_proveedor` (`idproveedor`),
  KEY `idx_usuario` (`idusuario`),
  KEY `idx_atencion` (`idatencion`),
  FOREIGN KEY (`idproveedor`) REFERENCES `inv_proveedores`(`idproveedor`) ON DELETE SET NULL,
  FOREIGN KEY (`idusuario`) REFERENCES `usuario`(`idusuario`) ON DELETE SET NULL,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Movimientos de inventario';

CREATE TABLE IF NOT EXISTS `inv_detalle_movimientos` (
  `iddetalle` INT(11) NOT NULL AUTO_INCREMENT,
  `idmovimiento` INT(11) NOT NULL,
  `idproducto` INT(11) NOT NULL,
  `cantidad` DECIMAL(10,2) NOT NULL,
  `precio_unitario` DECIMAL(10,2) DEFAULT 0.00,
  `subtotal` DECIMAL(10,2) DEFAULT 0.00,
  `lote` VARCHAR(100),
  `fecha_vencimiento` DATE,
  `observaciones` TEXT,
  PRIMARY KEY (`iddetalle`),
  KEY `idx_movimiento` (`idmovimiento`),
  KEY `idx_producto` (`idproducto`),
  FOREIGN KEY (`idmovimiento`) REFERENCES `inv_movimientos`(`idmovimiento`) ON DELETE CASCADE,
  FOREIGN KEY (`idproducto`) REFERENCES `inv_productos`(`idproducto`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Detalle de movimientos';

CREATE TABLE IF NOT EXISTS `inv_ventas` (
  `idventa` INT(11) NOT NULL AUTO_INCREMENT,
  `numero_venta` VARCHAR(50) NOT NULL,
  `fecha_venta` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `idpersona` INT(11),
  `idusuario` INT(11),
  `idatencion` INT(11),
  `tipo_comprobante` ENUM('FACTURA', 'BOLETA', 'TICKET', 'NOTA_VENTA') DEFAULT 'TICKET',
  `numero_comprobante` VARCHAR(50),
  `subtotal` DECIMAL(10,2) DEFAULT 0.00,
  `descuento` DECIMAL(10,2) DEFAULT 0.00,
  `impuesto` DECIMAL(10,2) DEFAULT 0.00,
  `total` DECIMAL(10,2) NOT NULL,
  `metodo_pago` ENUM('EFECTIVO', 'TARJETA', 'TRANSFERENCIA', 'CREDITO', 'MIXTO') DEFAULT 'EFECTIVO',
  `estado` ENUM('PENDIENTE', 'PAGADO', 'ANULADO') DEFAULT 'PAGADO',
  `observaciones` TEXT,
  `fecha_registro` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`idventa`),
  UNIQUE KEY `numero_venta_unique` (`numero_venta`),
  KEY `idx_fecha` (`fecha_venta`),
  KEY `idx_persona` (`idpersona`),
  KEY `idx_usuario` (`idusuario`),
  KEY `idx_atencion` (`idatencion`),
  KEY `idx_estado` (`estado`),
  FOREIGN KEY (`idpersona`) REFERENCES `persona`(`idpersona`) ON DELETE SET NULL,
  FOREIGN KEY (`idusuario`) REFERENCES `usuario`(`idusuario`) ON DELETE SET NULL,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Ventas directas';

CREATE TABLE IF NOT EXISTS `inv_detalle_ventas` (
  `iddetalle_venta` INT(11) NOT NULL AUTO_INCREMENT,
  `idventa` INT(11) NOT NULL,
  `idproducto` INT(11) NOT NULL,
  `cantidad` DECIMAL(10,2) NOT NULL,
  `precio_unitario` DECIMAL(10,2) NOT NULL,
  `descuento` DECIMAL(10,2) DEFAULT 0.00,
  `subtotal` DECIMAL(10,2) NOT NULL,
  `lote` VARCHAR(100),
  PRIMARY KEY (`iddetalle_venta`),
  KEY `idx_venta` (`idventa`),
  KEY `idx_producto` (`idproducto`),
  FOREIGN KEY (`idventa`) REFERENCES `inv_ventas`(`idventa`) ON DELETE CASCADE,
  FOREIGN KEY (`idproducto`) REFERENCES `inv_productos`(`idproducto`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Detalle de ventas';

CREATE TABLE IF NOT EXISTS `inv_alertas` (
  `idalerta` INT(11) NOT NULL AUTO_INCREMENT,
  `idproducto` INT(11) NOT NULL,
  `tipo_alerta` ENUM('STOCK_MINIMO', 'VENCIMIENTO_PROXIMO', 'VENCIDO', 'STOCK_CERO') NOT NULL,
  `mensaje` TEXT,
  `fecha_alerta` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `leida` TINYINT(1) DEFAULT 0,
  `fecha_lectura` DATETIME,
  PRIMARY KEY (`idalerta`),
  KEY `idx_producto` (`idproducto`),
  KEY `idx_tipo` (`tipo_alerta`),
  KEY `idx_leida` (`leida`),
  FOREIGN KEY (`idproducto`) REFERENCES `inv_productos`(`idproducto`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Alertas de inventario';

CREATE TABLE IF NOT EXISTS `inv_historial_precios` (
  `idhistorial` INT(11) NOT NULL AUTO_INCREMENT,
  `idproducto` INT(11) NOT NULL,
  `precio_compra_anterior` DECIMAL(10,2),
  `precio_compra_nuevo` DECIMAL(10,2),
  `precio_venta_anterior` DECIMAL(10,2),
  `precio_venta_nuevo` DECIMAL(10,2),
  `idusuario` INT(11),
  `fecha_cambio` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `motivo` TEXT,
  PRIMARY KEY (`idhistorial`),
  KEY `idx_producto` (`idproducto`),
  KEY `idx_fecha` (`fecha_cambio`),
  FOREIGN KEY (`idproducto`) REFERENCES `inv_productos`(`idproducto`) ON DELETE CASCADE,
  FOREIGN KEY (`idusuario`) REFERENCES `usuario`(`idusuario`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Historial de precios';

INSERT INTO `inv_categorias` (`nombre`, `descripcion`, `tipo`) VALUES
('Medicamentos Generales', 'Medicamentos de uso general', 'MEDICAMENTO'),
('Anestésicos', 'Anestésicos locales y generales', 'MEDICAMENTO'),
('Antibióticos', 'Antibióticos y antimicrobianos', 'MEDICAMENTO'),
('Analgésicos', 'Analgésicos y antiinflamatorios', 'MEDICAMENTO'),
('Material de Curación', 'Gasas, algodón, vendas', 'MATERIAL'),
('Instrumental Médico', 'Instrumental médico y odontológico', 'EQUIPO'),
('Material de Impresión', 'Alginatos, siliconas', 'MATERIAL'),
('Materiales de Restauración', 'Resinas, amalgamas, cementos', 'MATERIAL'),
('Equipos Médicos', 'Equipos médicos y odontológicos', 'EQUIPO'),
('Insumos de Limpieza', 'Desinfectantes, jabones', 'INSUMO'),
('Descartables', 'Guantes, mascarillas, baberos', 'INSUMO'),
('Sueros y Soluciones', 'Sueros, soluciones parenterales', 'MEDICAMENTO')
ON DUPLICATE KEY UPDATE nombre=nombre;
