<?php
declare(strict_types=1);

require_once __DIR__ . '/../config/helpers.php';

$data = input_json();
require_fields($data, ['nome', 'cpf', 'email', 'celular', 'senha', 'codigoind']);

$tipo = ($data['tipo'] ?? 'passageiro') === 'motorista' ? 'motorista' : 'passageiro';
$statusVerificacao = $tipo === 'motorista' ? 'pendente' : 'aprovado';
$cpf = preg_replace('/\D+/', '', (string) $data['cpf']);
$celular = preg_replace('/\D+/', '', (string) $data['celular']);
$email = strtolower(trim((string) $data['email']));
$indicador = empty($data['indicador']) ? '' : trim((string) $data['indicador']);

try {
    $pdo = db();

    $exists = $pdo->prepare('SELECT id FROM usuarios WHERE email = ? OR cpf = ? OR codigoind = ? LIMIT 1');
    $exists->execute([$email, $cpf, $data['codigoind']]);
    if ($exists->fetch()) {
        json_fail('E-mail, CPF ou codigo de indicacao ja cadastrado.');
    }

    indicador_validar_para_tipo($indicador, $tipo);

    $stmt = $pdo->prepare(
        'INSERT INTO usuarios (
            nome, cpf, email, celular, telefone_verificado, telefone_verificado_em,
            firebase_phone_uid, firebase_phone, senha_hash, tipo, codigoind,
            indicador_codigo, status_verificacao
         )
         VALUES (?, ?, ?, ?, 0, NULL, NULL, NULL, ?, ?, ?, ?, ?)'
    );
    $stmt->execute([
        trim((string) $data['nome']),
        $cpf,
        $email,
        $celular,
        password_hash((string) $data['senha'], PASSWORD_DEFAULT),
        $tipo,
        trim((string) $data['codigoind']),
        $indicador === '' ? null : $indicador,
        $statusVerificacao,
    ]);

    json_ok(['id' => (int) $pdo->lastInsertId()]);
} catch (Throwable $e) {
    json_fail('Erro ao cadastrar usuario.', 500, ['error' => $e->getMessage()]);
}
