<?php
declare(strict_types=1);

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

$data = input_json();
require_fields($data, ['celular', 'nova_senha', 'firebase_phone_uid', 'firebase_phone']);

$celular = preg_replace('/\D+/', '', (string) $data['celular']);
$novaSenha = (string) $data['nova_senha'];
$firebasePhoneUid = trim((string) $data['firebase_phone_uid']);
$firebasePhone = preg_replace('/\D+/', '', (string) $data['firebase_phone']);

if (!preg_match('/^\d{10,11}$/', $celular)) {
    json_fail('Celular invalido. Informe DDD + numero.');
}
if (strlen($novaSenha) < 8) {
    json_fail('A nova senha precisa ter no minimo 8 caracteres.');
}
if ($firebasePhoneUid === '' || $firebasePhone === '') {
    json_fail('Confirme o telefone por SMS antes de trocar a senha.');
}
if (substr($firebasePhone, -strlen($celular)) !== $celular) {
    json_fail('O telefone confirmado nao confere com o telefone informado.');
}

try {
    $pdo = db();
    $stmt = $pdo->prepare('SELECT id FROM usuarios WHERE celular = ? LIMIT 1');
    $stmt->execute([$celular]);
    $idUsuario = (int) ($stmt->fetchColumn() ?: 0);
    if ($idUsuario <= 0) {
        json_fail('Nenhuma conta encontrada com esse celular.', 404);
    }

    $up = $pdo->prepare(
        'UPDATE usuarios
         SET senha_hash = ?,
             telefone_verificado = 1,
             telefone_verificado_em = NOW(),
             firebase_phone_uid = ?,
             firebase_phone = ?
         WHERE id = ?'
    );
    $up->execute([
        password_hash($novaSenha, PASSWORD_DEFAULT),
        $firebasePhoneUid,
        '+' . $firebasePhone,
        $idUsuario,
    ]);

    json_ok(['message' => 'Senha alterada com sucesso.']);
} catch (Throwable $e) {
    json_fail('Erro ao recuperar senha.', 500, ['error' => $e->getMessage()]);
}
