<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';
admin_require_login();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: cadastros_motoristas.php');
    exit;
}

$id = (int) ($_POST['id'] ?? 0);
$motorista = admin_buscar_motorista_por_id($id);

if (!$motorista) {
    admin_flash('Motorista não encontrado.', 'error');
    header('Location: cadastros_motoristas.php');
    exit;
}

$primeiroNome = trim((string) ($_POST['primeiro_nome'] ?? ''));
$sobrenome = trim((string) ($_POST['sobrenome'] ?? ''));
$nome = trim($primeiroNome . ' ' . $sobrenome);
$email = trim((string) ($_POST['email'] ?? ''));
$celular = preg_replace('/\D+/', '', (string) ($_POST['celular'] ?? ''));
$cpf = preg_replace('/\D+/', '', (string) ($_POST['cpf'] ?? ''));
$cep = preg_replace('/\D+/', '', (string) ($_POST['cep'] ?? ''));
$logradouro = trim((string) ($_POST['endereco_logradouro'] ?? ''));
$numero = trim((string) ($_POST['endereco_numero'] ?? ''));
$complemento = trim((string) ($_POST['endereco_complemento'] ?? ''));
$bairro = trim((string) ($_POST['endereco_bairro'] ?? ''));
$cidade = trim((string) ($_POST['endereco_cidade'] ?? ''));
$uf = strtoupper(trim((string) ($_POST['endereco_uf'] ?? '')));

function admin_cpf_valido(string $cpf): bool
{
    $cpf = preg_replace('/\D+/', '', $cpf);
    if (strlen($cpf) !== 11 || preg_match('/^(\d)\1{10}$/', $cpf)) {
        return false;
    }

    for ($t = 9; $t < 11; $t++) {
        $soma = 0;
        for ($i = 0; $i < $t; $i++) {
            $soma += (int) $cpf[$i] * (($t + 1) - $i);
        }
        $digito = ($soma * 10) % 11;
        if ($digito === 10) {
            $digito = 0;
        }
        if ((int) $cpf[$t] !== $digito) {
            return false;
        }
    }

    return true;
}

if (strlen($primeiroNome) < 2 || strlen($sobrenome) < 2) {
    admin_flash('Preencha nome e sobrenome.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    admin_flash('E-mail inválido.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}

if (!admin_cpf_valido($cpf)) {
    admin_flash('CPF invalido.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}

if (!preg_match('/^\d{10,11}$/', $celular)) {
    admin_flash('Telefone inválido. Informe DDD + número.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}

if (!preg_match('/^\d{8}$/', $cep) || $logradouro === '' || $numero === '' || $bairro === '' || $cidade === '' || !preg_match('/^[A-Z]{2}$/', $uf)) {
    admin_flash('Preencha endereço, número, bairro, cidade, UF e CEP corretamente.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}

try {
    $stmt = db()->prepare(
        'UPDATE usuarios
         SET nome = ?, primeiro_nome = ?, sobrenome = ?, email = ?, celular = ?, cpf = ?,
             cep = ?, endereco_logradouro = ?, endereco_numero = ?, endereco_complemento = ?,
             endereco_bairro = ?, endereco_cidade = ?, endereco_uf = ?, atualizado_em = NOW()
         WHERE id = ? AND tipo = "motorista"'
    );
    $stmt->execute([
        $nome,
        $primeiroNome,
        $sobrenome,
        $email,
        $celular,
        $cpf,
        $cep,
        $logradouro,
        $numero,
        $complemento === '' ? null : $complemento,
        $bairro,
        $cidade,
        $uf,
        $id,
    ]);

    admin_flash('Motorista atualizado com sucesso.');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
} catch (Throwable $e) {
    admin_flash('Erro ao salvar motorista.', 'error');
    header('Location: editar_motorista.php?id=' . $id);
    exit;
}
