-- ==============================================================================
-- DAS BROT PRO ERP - ESQUEMA DE BASE DE DATOS MYSQL / CPANEL
-- ==============================================================================
-- Compatible con MySQL 5.7+, MySQL 8.0+ y MariaDB 10.3+
-- Codificación: UTF-8 Unicode (utf8mb4)

SET FOREIGN_KEY_CHECKS = 0;
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

-- --------------------------------------------------------
-- 1. TABLA: usuarios (Control de Acceso RBAC)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `email` VARCHAR(191) NOT NULL UNIQUE,
  `password_hash` VARCHAR(255) NOT NULL,
  `nombre` VARCHAR(100) NOT NULL,
  `rol` ENUM('superadmin', 'admin', 'chef', 'finanzas', 'bodega', 'viewer') NOT NULL DEFAULT 'viewer',
  `estado` ENUM('activo', 'inactivo') NOT NULL DEFAULT 'activo',
  `ultimo_login` DATETIME NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- 2. TABLA: insumos (Catálogo Maestro de Materias Primas)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `insumos` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `codigo` VARCHAR(50) NOT NULL UNIQUE,
  `nombre` VARCHAR(255) NOT NULL,
  `cantidad_empaque` DECIMAL(12,3) NOT NULL DEFAULT 1.000,
  `unidad_medida` VARCHAR(20) NOT NULL DEFAULT 'gr',
  `precio_calculado` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `precio_con_iva` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `proveedor` VARCHAR(100) NULL DEFAULT '',
  `rendimiento_pct` DECIMAL(5,2) NOT NULL DEFAULT 100.00,
  `merma_pct` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` VARCHAR(191) NULL DEFAULT 'sistema',
  INDEX `idx_insumo_codigo` (`codigo`),
  INDEX `idx_insumo_nombre` (`nombre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- 3. TABLA: recetas (Catálogo de Fórmulas y Productos)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `recetas` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `codigo` VARCHAR(50) NULL UNIQUE,
  `nombre` VARCHAR(255) NOT NULL,
  `categoria` VARCHAR(100) NOT NULL DEFAULT 'Pastelería',
  `rendimiento` DECIMAL(10,2) NOT NULL DEFAULT 1.00,
  `peso_total_masa` VARCHAR(50) NULL DEFAULT '0 Kg',
  `tiempo_prep` INT NOT NULL DEFAULT 30,
  `costo_total` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `precio_venta` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `margen_objetivo` DECIMAL(5,2) NOT NULL DEFAULT 45.00,
  `instrucciones` TEXT NULL,
  `notas` TEXT NULL,
  `cost_config_json` LONGTEXT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `created_by` VARCHAR(191) NULL DEFAULT 'sistema',
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` VARCHAR(191) NULL DEFAULT 'sistema',
  INDEX `idx_receta_nombre` (`nombre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- 4. TABLA: receta_ingredientes (Detalle Insumos por Receta)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `receta_ingredientes` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `receta_id` INT NOT NULL,
  `insumo_codigo` VARCHAR(50) NOT NULL,
  `nombre` VARCHAR(255) NOT NULL,
  `cantidad` DECIMAL(12,3) NOT NULL DEFAULT 0.000,
  `unidad` VARCHAR(20) NOT NULL DEFAULT 'gr',
  `costo` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  `es_subreceta` TINYINT(1) NOT NULL DEFAULT 0,
  INDEX `idx_ri_receta_id` (`receta_id`),
  INDEX `idx_ri_insumo_codigo` (`insumo_codigo`),
  CONSTRAINT `fk_ri_receta` FOREIGN KEY (`receta_id`) REFERENCES `recetas` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- 5. TABLA: configuracion_costos (Overheads HH, CIF & Reglas)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `configuracion_costos` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `clave` VARCHAR(100) NOT NULL UNIQUE,
  `valor_json` LONGTEXT NOT NULL,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` VARCHAR(191) NULL DEFAULT 'sistema'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- 6. TABLA: auditoria_cambios (Trazabilidad y Log de Auditoría)
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `auditoria_cambios` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `entidad_tipo` VARCHAR(50) NOT NULL,
  `entidad_id` VARCHAR(50) NULL,
  `accion` VARCHAR(50) NOT NULL,
  `usuario_email` VARCHAR(191) NOT NULL,
  `usuario_nombre` VARCHAR(100) NOT NULL,
  `resumen` TEXT NOT NULL,
  `detalle_antes` LONGTEXT NULL,
  `detalle_despues` LONGTEXT NULL,
  `ip_address` VARCHAR(45) NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX `idx_audit_entidad` (`entidad_tipo`, `entidad_id`),
  INDEX `idx_audit_usuario` (`usuario_email`),
  INDEX `idx_audit_fecha` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------
-- DATOS INICIALES (SEMILLAS OBLIGATORIAS)
-- --------------------------------------------------------

-- Insertar Super Administrador (lpino@dasbrot.cl / hbd5rmzy)
INSERT INTO `usuarios` (`email`, `password_hash`, `nombre`, `rol`, `estado`) 
VALUES (
  'lpino@dasbrot.cl',
  '$2y$10$Yvg4rPnjoQSw3rGqjY8dFuW7Dv1MDk8lHfsKM2/wDtY2s0P1mJqym',
  'Leonardo Pino (Super Admin)',
  'superadmin',
  'activo'
) ON DUPLICATE KEY UPDATE `nombre` = VALUES(`nombre`), `rol` = 'superadmin', `estado` = 'activo';

-- Insertar Usuarios Secundarios de Ejemplo
INSERT INTO `usuarios` (`email`, `password_hash`, `nombre`, `rol`, `estado`)
VALUES 
('chef@dasbrot.cl', '$2y$10$Yvg4rPnjoQSw3rGqjY8dFuW7Dv1MDk8lHfsKM2/wDtY2s0P1mJqym', 'Pastelero Maestro', 'chef', 'activo'),
('finanzas@dasbrot.cl', '$2y$10$Yvg4rPnjoQSw3rGqjY8dFuW7Dv1MDk8lHfsKM2/wDtY2s0P1mJqym', 'Analista de Costos', 'finanzas', 'activo'),
('bodega@dasbrot.cl', '$2y$10$Yvg4rPnjoQSw3rGqjY8dFuW7Dv1MDk8lHfsKM2/wDtY2s0P1mJqym', 'Encargado Bodega & Insumos', 'bodega', 'activo')
ON DUPLICATE KEY UPDATE `email` = `email`;

-- Insertar Parámetros Globales de Costeo por Defecto
INSERT INTO `configuracion_costos` (`clave`, `valor_json`, `updated_by`)
VALUES (
  'global_settings',
  '{"hh_enabled":true,"default_hh_mode":"percent_final","default_hh_value":15.0,"default_hh_hourly_rate":4500,"cif_enabled":true,"default_cif_mode":"percent_material","default_cif_value":10.0,"personal_enabled":true,"default_personal_mode":"percent_material","default_personal_value":5.0,"packaging_enabled":true,"default_packaging_unit":120,"default_margen_objetivo":45.0,"iva_pct":19.0,"currency_symbol":"$","currency_code":"CLP","custom_costs":[{"id":"cc_1","name":"Merma de Horneado","type":"percent_material","value":3.5,"active":true},{"id":"cc_2","name":"Comisión POS Transbank","type":"percent_final","value":2.5,"active":true}]}',
  'lpino@dasbrot.cl'
) ON DUPLICATE KEY UPDATE `valor_json` = VALUES(`valor_json`);

SET FOREIGN_KEY_CHECKS = 1;

