-- ============================================
-- CORREÇÃO FINAL DO ERRO 500 - SOLICITAÇÕES DE VIAGEM
-- Execute este script diretamente no banco de dados
-- ============================================

USE pinheir3_controle_frotas;

-- 1. Verificar se estamos no banco correto
SELECT DATABASE() as banco_atual;

-- 2. Remover foreign keys problemáticas (se existirem)
SET FOREIGN_KEY_CHECKS = 0;

-- 3. Recriar tabela solicitacoes_viagem
DROP TABLE IF EXISTS solicitacoes_viagem;

CREATE TABLE 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,
    data_resposta TIMESTAMP NULL,
    justificativa_gestor TEXT NULL,
    
    -- Dados extras
    observacoes TEXT NULL,
    prioridade ENUM('baixa', 'normal', 'alta', 'urgente') DEFAULT 'normal',
    
    -- Controle
    viagem_id BIGINT NULL,
    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;

-- 4. Criar tabela notificacoes_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,
    solicitacao_id BIGINT NULL,
    viagem_id BIGINT NULL,
    lida BOOLEAN DEFAULT FALSE,
    enviada BOOLEAN DEFAULT FALSE,
    data_envio TIMESTAMP NULL,
    fcm_token VARCHAR(500) NULL,
    fcm_message_id VARCHAR(200) NULL,
    fcm_response TEXT NULL,
    tentativas_envio INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    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;

-- 5. Adicionar campos na tabela motoristas
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. Reativar foreign key checks
SET FOREIGN_KEY_CHECKS = 1;

-- 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';

-- 10. 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;

SELECT 'Correção do erro 500 concluída com sucesso!' as status; 