-- Tabela de reservas de estoque para ordens de produção
CREATE TABLE IF NOT EXISTS estoque_reservas (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Ordem de produção
    production_order_id BIGINT UNSIGNED NOT NULL,
    
    -- Material reservado
    product_id BIGINT UNSIGNED NOT NULL,
    
    -- Quantidades
    quantidade_reservada DECIMAL(18,3) NOT NULL,
    quantidade_utilizada DECIMAL(18,3) DEFAULT 0,
    quantidade_liberada DECIMAL(18,3) DEFAULT 0,
    
    -- Status
    status ENUM('reservada', 'parcialmente_utilizada', 'utilizada', 'liberada', 'cancelada') DEFAULT 'reservada',
    
    -- Datas
    data_reserva DATETIME NOT NULL,
    data_utilizacao DATETIME NULL,
    data_liberacao DATETIME NULL,
    data_expiracao DATETIME NULL, -- Data de expiração da reserva
    
    -- Referência ao consumo de material
    material_consumption_id BIGINT UNSIGNED NULL,
    
    -- Metadados
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_production_order (production_order_id),
    INDEX idx_product (product_id),
    INDEX idx_status (status),
    INDEX idx_data_reserva (data_reserva),
    INDEX idx_data_expiracao (data_expiracao),
    INDEX idx_material_consumption (material_consumption_id),
    FOREIGN KEY (production_order_id) REFERENCES production_orders(id) ON DELETE CASCADE,
    FOREIGN KEY (material_consumption_id) REFERENCES production_material_consumption(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de alertas de falta de estoque
CREATE TABLE IF NOT EXISTS estoque_alertas (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Produto
    product_id BIGINT UNSIGNED NOT NULL,
    
    -- Ordem de produção relacionada
    production_order_id BIGINT UNSIGNED NULL,
    
    -- Dados do alerta
    tipo ENUM('falta_estoque', 'estoque_minimo', 'reserva_nao_atendida') DEFAULT 'falta_estoque',
    severidade ENUM('baixa', 'media', 'alta', 'critica') DEFAULT 'media',
    
    -- Quantidades
    quantidade_necessaria DECIMAL(18,3) NOT NULL,
    quantidade_disponivel DECIMAL(18,3) NOT NULL,
    quantidade_faltante DECIMAL(18,3) NOT NULL,
    
    -- Status
    status ENUM('pendente', 'resolvido', 'ignorado') DEFAULT 'pendente',
    
    -- Datas
    data_alertagem DATETIME NOT NULL,
    data_resolucao DATETIME NULL,
    
    -- Metadados
    mensagem TEXT NULL,
    resolvido_por INT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_product (product_id),
    INDEX idx_production_order (production_order_id),
    INDEX idx_tipo (tipo),
    INDEX idx_status (status),
    INDEX idx_severidade (severidade),
    INDEX idx_data_alertagem (data_alertagem),
    FOREIGN KEY (production_order_id) REFERENCES production_orders(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

