-- ============================================================
-- SISTEMA DE GESTIÓN DE DESPACHOS - SCRIPT MAESTRO
-- Base de Datos: tiexdig_db
-- ============================================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

-- -------------------------------------------------------------
-- 1. TABLAS DE SEGURIDAD Y USUARIOS
-- -------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  `permisos` enum('epp','epp_mantencion','mantencion','general','control') DEFAULT 'general',
  `estado` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario` (`usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Usuario Admin por defecto (Pass: admin123)
INSERT INTO `usuarios` (`usuario`, `password`, `email`, `permisos`) VALUES
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@tiexdig.com', 'control');

CREATE TABLE IF NOT EXISTS `login_intentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip_address` varchar(45) NOT NULL,
  `usuario_intentado` varchar(50) DEFAULT NULL,
  `exito` tinyint(1) DEFAULT 0,
  `fecha_intento` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_ip` (`ip_address`),
  KEY `idx_fecha` (`fecha_intento`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- -------------------------------------------------------------
-- 2. TABLAS DE CLIENTES Y SUCURSALES
-- -------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `clientes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rut` varchar(20) NOT NULL,
  `razon_social` varchar(150) NOT NULL,
  `telefono_contacto` varchar(20) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `estado` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `direcciones_cliente` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_id` int(11) NOT NULL,
  `direccion` varchar(255) NOT NULL,
  `ciudad` varchar(100) DEFAULT NULL,
  `region` varchar(100) DEFAULT NULL,
  `observacion` text,
  `estado` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`id`),
  KEY `cliente_id` (`cliente_id`),
  CONSTRAINT `direcciones_cliente_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `sucursales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `direccion` varchar(255) DEFAULT NULL,
  `estado` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- -------------------------------------------------------------
-- 3. TABLAS DE DESPACHOS (CORE DEL SISTEMA)
-- -------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `despachos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fecha_entrega` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_inicio_servicio` date NOT NULL,
  `fecha_termino_estimado` date DEFAULT NULL,
  `conductor_id` int(11) NOT NULL,
  `vehiculo_id` int(11) DEFAULT NULL,
  `semirremolque_id` int(11) DEFAULT NULL,
  `cliente_id` int(11) NOT NULL,
  `direccion_cliente_id` int(11) DEFAULT NULL,
  `sucursal_id` int(11) DEFAULT NULL,
  `origen` varchar(150) DEFAULT NULL,
  `destino` varchar(150) DEFAULT NULL,
  `detalle_carga` text,
  `observaciones` text,
  `total_despacho` decimal(10,2) DEFAULT 0.00,
  `usuario_entrega_id` int(11) NOT NULL,
  `estado` enum('pendiente','en_curso','finalizado','cerrado') DEFAULT 'pendiente',
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_conductor` (`conductor_id`),
  KEY `idx_fecha` (`fecha_entrega`),
  KEY `idx_estado` (`estado`),
  KEY `idx_busqueda` (`conductor_id`,`cliente_id`,`estado`,`fecha_entrega`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `despacho_detalle_montos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `despacho_id` int(11) NOT NULL,
  `tipo_item` enum('viatico','alojamiento','estacionamiento','peajes','otros') NOT NULL,
  `descripcion` varchar(255) DEFAULT NULL,
  `monto` decimal(10,2) NOT NULL,
  `fecha_registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `despacho_id` (`despacho_id`),
  CONSTRAINT `despacho_detalle_montos_ibfk_1` FOREIGN KEY (`despacho_id`) REFERENCES `despachos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- -------------------------------------------------------------
-- 4. TABLAS DE AUDITORÍA
-- -------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `auditoria` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `accion` varchar(50) NOT NULL,
  `tabla_afectada` varchar(50) DEFAULT NULL,
  `registro_id` int(11) DEFAULT NULL,
  `datos_anteriores` text,
  `datos_nuevos` text,
  `ip_address` varchar(45) DEFAULT NULL,
  `user_agent` text,
  `fecha_accion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `usuario_id` (`usuario_id`),
  CONSTRAINT `auditoria_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

COMMIT;