# 🧪 Teste Endpoints de Exclusão

Testando os endpoints de exclusão que foram adicionados na API:

### ✅ Endpoints Adicionados

- ✅ `excluir_cliente` - Excluir cliente com validações
- ✅ `excluir_motorista` - Excluir motorista com validações
- ✅ `excluir_veiculo` - Já existia, funcionando

### 🔧 Validações Implementadas

- ✅ Verifica se o registro existe
- ✅ Verifica se há viagens em andamento
- ✅ Verifica se há veículos vinculados (clientes)
- ✅ Verifica se há viagens vinculadas
- ✅ Retorna mensagens de erro específicas

### 📋 Como Testar

##### 1. Teste de Exclusão de Cliente

1. Acesse Cadastros
2. Vá para a aba "Clientes"
3. Clique no botão "Excluir" (ícone lixeira) em qualquer cliente
4. Confirme a exclusão
5. Verifique se o cliente foi removido da lista

##### 2. Teste de Exclusão de Motorista

1. Vá para a aba "Motoristas"
2. Clique no botão "Excluir" em qualquer motorista
3. Confirme a exclusão
4. Verifique se o motorista foi removido da lista

##### 3. Teste de Exclusão de Veículo

1. Vá para a aba "Veículos"
2. Clique no botão "Excluir" em qualquer veículo
3. Confirme a exclusão
4. Verifique se o veículo foi removido da lista

### 🔍 Log de Mudanças

##### 1. Endpoint excluir_cliente

    case 'excluir_cliente':
        // Excluir cliente
        $pdo = conectarBanco();

        if ($metodo === 'POST') {
            $input = json_decode(file_get_contents('php://input'), true);

            if (!$input || !isset($input['id'])) {
                resposta(false, null, 'ID do cliente é obrigatório', 400);
            }

            $id = intval($input['id']);

            if ($id <= 0) {
                resposta(false, null, 'ID do cliente inválido', 400);
            }

            try {
                // Verificar se o cliente existe
                $stmt = $pdo->prepare("SELECT id, nome FROM clientes WHERE id = ?");
                $stmt->execute([$id]);
                $cliente = $stmt->fetch();

                if (!$cliente) {
                    resposta(false, null, 'Cliente não encontrado', 404);
                }

                // Verificar se há veículos vinculados a este cliente
                $stmt = $pdo->prepare("
                    SELECT COUNT(*) as total
                    FROM veiculos
                    WHERE cliente_contrato_id = ?
                ");
                $stmt->execute([$id]);
                $veiculosVinculados = $stmt->fetch()['total'];

                if ($veiculosVinculados > 0) {
                    resposta(false, null, 'Não é possível excluir cliente com veículos vinculados', 400);
                }

                // Verificar se há viagens vinculadas a este cliente
                $stmt = $pdo->prepare("
                    SELECT COUNT(*) as total
                    FROM viagens
                    WHERE cliente_id = ? OR cliente = (SELECT nome FROM clientes WHERE id = ?)
                ");
                $stmt->execute([$id, $id]);
                $viagensVinculadas = $stmt->fetch()['total'];

                if ($viagensVinculadas > 0) {
                    resposta(false, null, 'Não é possível excluir cliente com viagens vinculadas', 400);
                }

                // Excluir cliente
                $stmt = $pdo->prepare("DELETE FROM clientes WHERE id = ?");
                $stmt->execute([$id]);

                if ($stmt->rowCount() > 0) {
                    resposta(true, null, "Cliente {$cliente['nome']} excluído com sucesso");
                } else {
                    resposta(false, null, 'Erro ao excluir cliente', 500);
                }

            } catch (Exception $e) {
                resposta(false, null, 'Erro ao excluir cliente: ' . $e->getMessage(), 500);
            }
        } else {
            resposta(false, null, 'Método não suportado', 405);
        }
        break;

##### 2. Endpoint excluir_motorista

    case 'excluir_motorista':
        // Excluir motorista
        $pdo = conectarBanco();

        if ($metodo === 'POST') {
            $input = json_decode(file_get_contents('php://input'), true);

            if (!$input || !isset($input['id'])) {
                resposta(false, null, 'ID do motorista é obrigatório', 400);
            }

            $id = intval($input['id']);

            if ($id <= 0) {
                resposta(false, null, 'ID do motorista inválido', 400);
            }

            try {
                // Verificar se o motorista existe
                $stmt = $pdo->prepare("SELECT id, nome FROM motoristas WHERE id = ?");
                $stmt->execute([$id]);
                $motorista = $stmt->fetch();

                if (!$motorista) {
                    resposta(false, null, 'Motorista não encontrado', 404);
                }

                // Verificar se há viagens em andamento
                $stmt = $pdo->prepare("
                    SELECT COUNT(*) as total
                    FROM viagens
                    WHERE motorista_id = ? AND data_fim IS NULL
                ");
                $stmt->execute([$id]);
                $viagensAtivas = $stmt->fetch()['total'];

                if ($viagensAtivas > 0) {
                    resposta(false, null, 'Não é possível excluir motorista com viagens em andamento', 400);
                }

                // Verificar se há viagens vinculadas a este motorista
                $stmt = $pdo->prepare("
                    SELECT COUNT(*) as total
                    FROM viagens
                    WHERE motorista_id = ? OR motorista = (SELECT nome FROM motoristas WHERE id = ?)
                ");
                $stmt->execute([$id, $id]);
                $viagensVinculadas = $stmt->fetch()['total'];

                if ($viagensVinculadas > 0) {
                    resposta(false, null, 'Não é possível excluir motorista com viagens vinculadas', 400);
                }

                // Excluir motorista
                $stmt = $pdo->prepare("DELETE FROM motoristas WHERE id = ?");
                $stmt->execute([$id]);

                if ($stmt->rowCount() > 0) {
                    resposta(true, null, "Motorista {$motorista['nome']} excluído com sucesso");
                } else {
                    resposta(false, null, 'Erro ao excluir motorista', 500);
                }

            } catch (Exception $e) {
                resposta(false, null, 'Erro ao excluir motorista: ' . $e->getMessage(), 500);
            }
        } else {
            resposta(false, null, 'Método não suportado', 405);
        }
        break;

##### 3. Fluxo de Funcionamento

1. Usuário clica em "Excluir" → JavaScript chama API
2. API recebe POST com ID do registro
3. API valida se o registro existe
4. API verifica se há vínculos (viagens, veículos)
5. Se não há vínculos, exclui o registro
6. Retorna sucesso e atualiza a lista