-- ============================================
-- CORREÇÃO DA ESTRUTURA DA TABELA SOLICITAÇÕES_VIAGEM
-- ============================================

USE pinheir3_controle_frotas;

-- 1. Verificar se a tabela existe
SELECT 'Verificando existência da tabela...' as status;

-- 2. Criar tabela se não existir
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)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Solicitações de viagem que precisam de aprovação do gestor';

-- 3. Adicionar campos que podem estar faltando
ALTER TABLE solicitacoes_viagem 
ADD COLUMN IF NOT EXISTS data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN IF NOT EXISTS tecnico_nome VARCHAR(100) NULL,
ADD COLUMN IF NOT EXISTS veiculo_modelo VARCHAR(100) NULL,
ADD COLUMN IF NOT EXISTS veiculo_placa VARCHAR(10) NULL;

-- 4. Verificar se a tabela notificacoes_push existe
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)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Notificações push para gestores e motoristas';

-- 5. Verificar se a tabela motoristas tem os campos necessários
ALTER TABLE motoristas 
ADD COLUMN IF NOT EXISTS token VARCHAR(255) NULL,
ADD COLUMN IF NOT EXISTS token_validade TIMESTAMP NULL,
ADD COLUMN IF NOT EXISTS tipo ENUM('motorista', 'gestor', 'admin') DEFAULT 'motorista';

-- 6. Criar índices para melhor performance
CREATE INDEX IF NOT EXISTS idx_motoristas_token ON motoristas(token);
CREATE INDEX IF NOT EXISTS idx_motoristas_tipo ON motoristas(tipo);

-- 7. Verificar estrutura final
SELECT 'Estrutura da tabela solicitacoes_viagem:' as info;
DESCRIBE solicitacoes_viagem;

SELECT 'Estrutura da tabela notificacoes_push:' as info;
DESCRIBE notificacoes_push;

SELECT 'Estrutura da tabela motoristas:' as info;
DESCRIBE motoristas;

-- 8. Testar inserção
INSERT INTO solicitacoes_viagem (
    tecnico_id, veiculo_id, cliente, motivo, km_inicial,
    latitude_inicial, longitude_inicial, endereco_inicial,
    observacoes, prioridade, status
) VALUES (
    '4', 6, 'Cliente Teste', 'Motivo Teste', 100,
    -10.9265, -37.0722, 'Endereço Teste',
    'Observação teste', 'normal', 'pendente'
);

SELECT 'Teste de inserção realizado com sucesso!' as status;
SELECT COUNT(*) as total_solicitacoes FROM solicitacoes_viagem;

-- 9. Limpar teste
DELETE FROM solicitacoes_viagem WHERE cliente = 'Cliente Teste' AND motivo = 'Motivo Teste';

SELECT 'Script de correção concluído com sucesso!' as status; 