-- =====================================================
-- Tabela de Fila de Webhooks de Vendas (Marketplaces)
-- =====================================================
-- Armazena webhooks recebidos de TODOS os marketplaces
-- (Mercado Livre, Shopee, etc) para processamento
-- assíncrono com retry inteligente e controle de falhas
-- =====================================================

CREATE TABLE IF NOT EXISTS `drophub_global`.`vendas_webhook_queue` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    
    -- Identificadores únicos
    `job_id` VARCHAR(64) NOT NULL COMMENT 'ID único do job (hash SHA256)',
    `order_id` VARCHAR(100) NULL COMMENT 'ID do pedido no marketplace',
    `resource` VARCHAR(500) NOT NULL COMMENT 'Resource path do webhook',
    
    -- Informações do marketplace e seller
    `marketplace` VARCHAR(50) NOT NULL COMMENT 'marketplace: mercado_livre, shopee, etc',
    `marketplace_user_id` VARCHAR(100) NOT NULL COMMENT 'User/Seller ID no marketplace',
    `seller_id` VARCHAR(600) NULL COMMENT 'Seller ID da tabela usuarios_api_contas',
    `user_id` INT NULL COMMENT 'ID do usuário no sistema',
    `whitelabel` VARCHAR(100) NULL COMMENT 'Whitelabel do usuário',
    `api_conta_id` INT NULL COMMENT 'ID da conta na usuarios_api_contas',
    
    -- Dados do webhook
    `topic` VARCHAR(50) NOT NULL COMMENT 'Tópico da notificação (orders_v2, items, order_status, etc)',
    `application_id` VARCHAR(100) NULL COMMENT 'Application ID do marketplace',
    `raw_data` JSON NOT NULL COMMENT 'Dados completos do webhook recebido',
    
    -- Controle de processamento
    `status` ENUM('pending', 'processing', 'completed', 'failed', 'cancelled') NOT NULL DEFAULT 'pending',
    `attempts` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Número de tentativas de processamento',
    `max_attempts` TINYINT UNSIGNED NOT NULL DEFAULT 3 COMMENT 'Máximo de tentativas permitidas',
    
    -- Detalhes de processamento
    `processed_immediately` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Se foi processado imediatamente no webhook',
    `last_error` TEXT NULL COMMENT 'Última mensagem de erro',
    `last_attempt_at` DATETIME NULL COMMENT 'Timestamp da última tentativa',
    `completed_at` DATETIME NULL COMMENT 'Timestamp de conclusão',
    
    -- Metadados
    `processing_time_ms` INT NULL COMMENT 'Tempo de processamento em milissegundos',
    `webhook_received_at` DATETIME NOT NULL COMMENT 'Quando o webhook foi recebido',
    `webhook_sent_at` DATETIME NULL COMMENT 'Quando o ML enviou (do campo sent)',
    
    -- Timestamps
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Chaves primárias e índices
    PRIMARY KEY (`id`),
    UNIQUE KEY `idx_job_id` (`job_id`),
    KEY `idx_order_id` (`order_id`),
    KEY `idx_marketplace` (`marketplace`),
    KEY `idx_marketplace_user_id` (`marketplace_user_id`),
    KEY `idx_seller_id` (`seller_id`),
    KEY `idx_user_id` (`user_id`),
    KEY `idx_whitelabel` (`whitelabel`),
    KEY `idx_status` (`status`),
    KEY `idx_topic` (`topic`),
    KEY `idx_created_at` (`created_at`),
    KEY `idx_status_attempts` (`status`, `attempts`),
    KEY `idx_pending_processing` (`status`, `last_attempt_at`),
    KEY `idx_marketplace_status` (`marketplace`, `status`, `created_at`)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Fila de webhooks de vendas de TODOS os marketplaces para processamento assíncrono';

-- =====================================================
-- Índices adicionais para otimização
-- =====================================================

-- Índice composto para buscar jobs pendentes para processamento
CREATE INDEX `idx_queue_processing` ON `drophub_global`.`vendas_webhook_queue` 
    (`status`, `attempts`, `last_attempt_at`, `created_at`);

-- Índice para estatísticas por whitelabel
CREATE INDEX `idx_stats_whitelabel` ON `drophub_global`.`vendas_webhook_queue` 
    (`whitelabel`, `status`, `created_at`);

-- Índice para estatísticas por marketplace
CREATE INDEX `idx_stats_marketplace` ON `drophub_global`.`vendas_webhook_queue` 
    (`marketplace`, `whitelabel`, `status`, `created_at`);

-- =====================================================
-- Comentários da tabela
-- =====================================================

ALTER TABLE `drophub_global`.`vendas_webhook_queue` 
COMMENT = 'Fila de processamento de webhooks de vendas de TODOS os marketplaces (Mercado Livre, Shopee, etc) com retry automático e controle de falhas. Suporta processamento imediato e assíncrono.';
