-- Modulo de Producciones
USE pos_torti;

-- Tabla principal de producciones
CREATE TABLE IF NOT EXISTS producciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    producto_id INT NOT NULL,
    cantidad_producida DECIMAL(10,2) NOT NULL,
    unidad VARCHAR(20) DEFAULT 'pza',
    fecha DATE NOT NULL,
    hora TIME DEFAULT NULL,
    usuario_id INT,
    notas TEXT,
    estado ENUM('completada', 'cancelada') DEFAULT 'completada',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (producto_id) REFERENCES productos(id),
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    INDEX idx_fecha (fecha),
    INDEX idx_producto (producto_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Detalle de ingredientes usados en cada produccion
CREATE TABLE IF NOT EXISTS produccion_ingredientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    produccion_id INT NOT NULL,
    ingrediente_id INT NOT NULL,
    cantidad_usada DECIMAL(10,4) NOT NULL,
    unidad VARCHAR(20) DEFAULT 'pza',
    costo_unitario DECIMAL(10,2) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (produccion_id) REFERENCES producciones(id) ON DELETE CASCADE,
    FOREIGN KEY (ingrediente_id) REFERENCES ingredientes(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Detalle de productos componentes usados en cada produccion
CREATE TABLE IF NOT EXISTS produccion_componentes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    produccion_id INT NOT NULL,
    componente_id INT NOT NULL,
    cantidad_usada DECIMAL(10,4) NOT NULL,
    unidad VARCHAR(20) DEFAULT 'pza',
    costo_unitario DECIMAL(10,2) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (produccion_id) REFERENCES producciones(id) ON DELETE CASCADE,
    FOREIGN KEY (componente_id) REFERENCES productos(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Agregar permiso ver_producciones
INSERT INTO permisos (codigo, nombre, descripcion, modulo) VALUES
('ver_producciones', 'Ver Producciones', 'Acceso al modulo de producciones', 'producciones')
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Asignar permiso a Administrador
INSERT INTO perfil_permisos (perfil_id, permiso_id)
SELECT
    (SELECT id FROM perfiles WHERE nombre = 'Administrador'),
    (SELECT id FROM permisos WHERE codigo = 'ver_producciones')
ON DUPLICATE KEY UPDATE perfil_id = perfil_id;

-- Asignar permiso a Vendedor (opcional, para que pueda registrar produccion)
INSERT INTO perfil_permisos (perfil_id, permiso_id)
SELECT
    (SELECT id FROM perfiles WHERE nombre = 'Vendedor'),
    (SELECT id FROM permisos WHERE codigo = 'ver_producciones')
ON DUPLICATE KEY UPDATE perfil_id = perfil_id;
