-- IA e Machine Learning

-- ============================================
-- PREVISÃO DE DEMANDA
-- ============================================

CREATE TABLE IF NOT EXISTS demanda_previsoes (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    product_id BIGINT UNSIGNED NOT NULL,
    
    -- Período
    mes INT NOT NULL,
    ano INT NOT NULL,
    
    -- Previsão
    demanda_prevista DECIMAL(18,3) NOT NULL,
    demanda_real DECIMAL(18,3) NULL, -- Preenchido quando período passar
    
    -- Métricas
    precisao DECIMAL(5,2) NULL, -- Precisão da previsão (%)
    confianca DECIMAL(5,2) NULL, -- Nível de confiança (%)
    
    -- Metadados
    modelo_versao VARCHAR(20) 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_periodo (ano, mes),
    UNIQUE KEY uk_tenant_product_periodo (tenant_id, product_id, ano, mes)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Histórico de vendas para treinamento
CREATE TABLE IF NOT EXISTS demanda_historico (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    product_id BIGINT UNSIGNED NOT NULL,
    
    -- Período
    data DATE NOT NULL,
    mes INT NOT NULL,
    ano INT NOT NULL,
    
    -- Dados
    quantidade_vendida DECIMAL(18,3) NOT NULL,
    valor_total DECIMAL(18,2) NOT NULL,
    
    -- Fatores externos (opcional)
    fator_sazonalidade DECIMAL(5,2) NULL,
    fator_promocao DECIMAL(5,2) NULL,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_product (product_id),
    INDEX idx_data (data),
    INDEX idx_periodo (ano, mes)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Modelos de ML
CREATE TABLE IF NOT EXISTS ml_modelos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Dados do modelo
    tipo ENUM('previsao_demanda', 'recomendacao', 'classificacao') NOT NULL,
    nome VARCHAR(255) NOT NULL,
    versao VARCHAR(20) NOT NULL,
    
    -- Status
    status ENUM('treinando', 'ativo', 'inativo', 'erro') DEFAULT 'inativo',
    
    -- Métricas
    precisao DECIMAL(5,2) NULL,
    acuracia DECIMAL(5,2) NULL,
    
    -- Dados do modelo (serializado)
    modelo_dados LONGBLOB NULL,
    
    -- Metadados
    data_treinamento DATETIME NULL,
    total_registros_treinamento INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_tipo (tipo),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- RECOMENDAÇÕES
-- ============================================

CREATE TABLE IF NOT EXISTS recomendacoes_produtos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Contexto
    product_id BIGINT UNSIGNED NULL, -- Produto base
    cliente_id BIGINT UNSIGNED NULL, -- Cliente base
    
    -- Recomendação
    produto_recomendado_id BIGINT UNSIGNED NOT NULL,
    score DECIMAL(10,4) NOT NULL, -- Score de similaridade/relevância
    
    -- Tipo de recomendação
    tipo ENUM('similar', 'frequentemente_comprado', 'baseado_historico', 'tendencia') NOT NULL,
    
    -- Metadados
    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_cliente (cliente_id),
    INDEX idx_produto_recomendado (produto_recomendado_id),
    INDEX idx_score (score)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

