-- ============================================
-- SISTEMA DE SOLICITAÇÃO E APROVAÇÃO DE VIAGENS
-- Data: 2025-01-26
-- ============================================

USE pinheir3_controle_frotas;

-- ============================================
-- TABELA DE SOLICITAÇÕES DE VIAGEM
-- ============================================
CREATE TABLE IF NOT EXISTS solicitacoes_viagem (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    tecnico_id VARCHAR(50) NOT NULL,
    veiculo_id BIGINT NOT NULL,
    cliente VARCHAR(200) NOT NULL,
    motivo TEXT NOT NULL,
    km_inicial INT NOT NULL,
    latitude_inicial DECIMAL(10, 8) NULL,
    longitude_inicial DECIMAL(11, 8) NULL,
    endereco_inicial TEXT NULL,
    cliente_id BIGINT NULL,
    data_solicitacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- Status da solicitação
    status ENUM('pendente', 'aprovada', 'negada', 'cancelada') DEFAULT 'pendente',
    gestor_id VARCHAR(50) NULL COMMENT 'ID do gestor que aprovou/negou',
    data_resposta TIMESTAMP NULL,
    justificativa_gestor TEXT NULL COMMENT 'Justificativa do gestor para aprovação/negação',
    
    -- Dados extras
    observacoes TEXT NULL,
    prioridade ENUM('baixa', 'normal', 'alta', 'urgente') DEFAULT 'normal',
    
    -- Controle
    viagem_id BIGINT NULL COMMENT 'ID da viagem criada após aprovação',
    sincronizado BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Índices
    INDEX idx_tecnico_id (tecnico_id),
    INDEX idx_veiculo_id (veiculo_id),
    INDEX idx_status (status),
    INDEX idx_gestor_id (gestor_id),
    INDEX idx_data_solicitacao (data_solicitacao),
    INDEX idx_prioridade (prioridade),
    
    -- Foreign keys
    FOREIGN KEY (tecnico_id) REFERENCES usuarios(id) ON UPDATE CASCADE,
    FOREIGN KEY (veiculo_id) REFERENCES veiculos(id) ON UPDATE CASCADE
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Solicitações de viagem que precisam de aprovação do gestor';

-- ============================================
-- TABELA DE NOTIFICAÇÕES PUSH
-- ============================================
CREATE TABLE IF NOT EXISTS notificacoes_push (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(50) NOT NULL,
    tipo ENUM('solicitacao_viagem', 'aprovacao_viagem', 'negacao_viagem', 'cancelamento_viagem', 'viagem_iniciada', 'viagem_finalizada') NOT NULL,
    titulo VARCHAR(200) NOT NULL,
    mensagem TEXT NOT NULL,
    
    -- Dados da solicitação/viagem relacionada
    solicitacao_id BIGINT NULL,
    viagem_id BIGINT NULL,
    
    -- Status da notificação
    lida BOOLEAN DEFAULT FALSE,
    enviada BOOLEAN DEFAULT FALSE,
    data_envio TIMESTAMP NULL,
    
    -- FCM (Firebase Cloud Messaging)
    fcm_token VARCHAR(500) NULL,
    fcm_message_id VARCHAR(200) NULL,
    fcm_response TEXT NULL,
    
    -- Controle
    tentativas_envio INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Índices
    INDEX idx_user_id (user_id),
    INDEX idx_tipo (tipo),
    INDEX idx_lida (lida),
    INDEX idx_enviada (enviada),
    INDEX idx_solicitacao_id (solicitacao_id),
    INDEX idx_viagem_id (viagem_id),
    INDEX idx_created_at (created_at),
    
    -- Foreign keys
    FOREIGN KEY (user_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (solicitacao_id) REFERENCES solicitacoes_viagem(id) ON DELETE CASCADE
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Notificações push para gestores e motoristas';

-- ============================================
-- TABELA DE TOKENS FCM (Firebase)
-- ============================================
CREATE TABLE IF NOT EXISTS fcm_tokens (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(50) NOT NULL,
    token VARCHAR(500) NOT NULL,
    device_id VARCHAR(100) NULL,
    device_name VARCHAR(100) NULL,
    app_version VARCHAR(20) NULL,
    platform ENUM('android', 'ios', 'web') DEFAULT 'android',
    ativo BOOLEAN DEFAULT TRUE,
    ultimo_uso TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Índices
    UNIQUE KEY unique_user_token (user_id, token),
    INDEX idx_user_id (user_id),
    INDEX idx_ativo (ativo),
    INDEX idx_platform (platform),
    
    -- Foreign key
    FOREIGN KEY (user_id) REFERENCES usuarios(id) ON DELETE CASCADE
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Tokens FCM para notificações push por usuário/dispositivo';

-- ============================================
-- CONFIGURAÇÕES DE NOTIFICAÇÕES
-- ============================================
INSERT INTO configuracoes (chave, valor, descricao, tipo, categoria) VALUES
('notificacoes_push_ativas', 'true', 'Ativar/desativar notificações push', 'boolean', 'notificacoes'),
('fcm_server_key', '', 'Chave do servidor Firebase para envio de notificações', 'string', 'notificacoes'),
('auto_aprovacao_viagens', 'false', 'Aprovação automática de viagens (para testes)', 'boolean', 'gestao'),
('gestor_principal_id', 'admin', 'ID do gestor principal para receber todas as notificações', 'string', 'gestao'),
('tempo_limite_aprovacao', '30', 'Tempo em minutos para aprovar uma solicitação', 'integer', 'gestao')
ON DUPLICATE KEY UPDATE valor=VALUES(valor);

-- ============================================
-- DADOS DE TESTE
-- ============================================

-- Inserir notificação de teste para o gestor
INSERT INTO notificacoes_push (
    user_id, 
    tipo, 
    titulo, 
    mensagem, 
    lida, 
    enviada
) VALUES (
    'admin', 
    'solicitacao_viagem', 
    '🚗 Nova Solicitação de Viagem', 
    'João Silva solicita viagem para Cliente ABC - Motivo: Manutenção preventiva', 
    FALSE, 
    FALSE
);

-- Verificar tabelas criadas
SELECT 'Tabelas do sistema de solicitações criadas com sucesso!' as status;

-- Mostrar estrutura das tabelas
DESCRIBE solicitacoes_viagem;
DESCRIBE notificacoes_push;
DESCRIBE fcm_tokens; 