-- ============================================
-- CORREÇÃO DO ERRO 500 - SOLICITAÇÕES DE VIAGEM
-- ============================================

USE pinheir3_controle_frotas;

-- 1. Remover foreign keys problemáticas
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_tecnico;
ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY IF EXISTS fk_solicitacao_veiculo;

-- 2. Recriar tabela com estrutura correta
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;

-- 3. Garantir que 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,
    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;

-- 4. Garantir que 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';

-- 5. 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);

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

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

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