<?php
declare(strict_types=1);

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

$data = input_json();
$idUsuario = (int) ($data['id_usuario'] ?? $data['id_motorista'] ?? 0);
$codigo = strtoupper(trim((string) ($data['codigo'] ?? $data['codigoind'] ?? '')));

if ($idUsuario <= 0 || $codigo === '') {
    json_fail('Informe o usuario e o codigo de indicacao.');
}

try {
    $pdo = db();
    $stmt = $pdo->prepare('SELECT id, tipo, codigoind, indicador_codigo, criado_em FROM usuarios WHERE id = ? LIMIT 1');
    $stmt->execute([$idUsuario]);
    $usuario = $stmt->fetch();
    if (!$usuario) {
        json_fail('Usuario nao encontrado.', 404);
    }

    $indicadorInvalidoRemovido = usuario_limpar_indicador_invalido_para_tipo(
        $pdo,
        $usuario,
        (string) $usuario['tipo']
    );
    if ($indicadorInvalidoRemovido) {
        $usuario['indicador_codigo'] = null;
    }

    if (trim((string) ($usuario['indicador_codigo'] ?? '')) !== '') {
        json_fail('Este cadastro ja possui um indicador.');
    }

    $criadoEm = new DateTimeImmutable((string) $usuario['criado_em']);
    if ((new DateTimeImmutable('now')) > $criadoEm->modify('+7 days')) {
        json_fail('O prazo de 7 dias para informar um indicador ja terminou.', 403);
    }

    if (strcasecmp((string) $usuario['codigoind'], $codigo) === 0) {
        json_fail('Voce nao pode usar o proprio codigo.');
    }

    indicador_validar_para_tipo($codigo, (string) $usuario['tipo']);

    $up = $pdo->prepare('UPDATE usuarios SET indicador_codigo = ? WHERE id = ? AND (indicador_codigo IS NULL OR indicador_codigo = "")');
    $up->execute([$codigo, $idUsuario]);

    json_ok([
        'indicador_codigo' => $codigo,
        'indicador_invalido_removido' => $indicadorInvalidoRemovido,
        'message' => 'Codigo de indicador vinculado com sucesso.',
    ]);
} catch (Throwable $e) {
    json_fail('Erro ao vincular indicador.', 500, ['error' => $e->getMessage()]);
}
