<?php
require_once __DIR__.'/../../_bootstrap.php';$u=apiUsuario($pdo);
if($_SERVER['REQUEST_METHOD']==='GET'){unset($u['sessao_id'],$u['dispositivo_id']);$u['foto_url']=urlAvatar($u['foto_perfil']??null,$u['foto_externa']??null);jsonResponse(['ok'=>true,'usuario'=>$u,'age'=>afResumoIdade($pdo,(int)$u['id'])]);}
if(!in_array($_SERVER['REQUEST_METHOD'],['PUT','PATCH'],true))jsonResponse(['ok'=>false,'erro'=>'Método não permitido.'],405);$d=requestJson();$nome=sanitize($d['nome']??$u['nome']);$username=strtolower(sanitize($d['username']??$u['username']));$email=strtolower(sanitize($d['email']??$u['email']));$bio=sanitize($d['bio']??($u['bio']??''));$cidade=sanitize($d['cidade']??($u['cidade']??''));$estado=sanitize($d['estado']??($u['estado']??''));$pais=sanitize($d['pais']??($u['pais']??'Brasil'))?:'Brasil';$perfilPrivado=afCanUseAgeFeature($pdo,(int)$u['id'],'share')?(!empty($d['perfil_privado'])?1:0):1;$erros=[];
if(mb_strlen($nome)<2||mb_strlen($nome)>100)$erros[]='Nome inválido.';if(!preg_match('/^[a-z0-9_]{3,30}$/',$username))$erros[]='Usuário inválido.';if(!filter_var($email,FILTER_VALIDATE_EMAIL))$erros[]='E-mail inválido.';if(mb_strlen($bio)>280)$erros[]='Bio muito longa.';$st=$pdo->prepare('SELECT id FROM af_usuarios WHERE (username=? OR email=?) AND id<>? LIMIT 1');$st->execute([$username,$email,$u['id']]);if($st->fetchColumn())$erros[]='Usuário ou e-mail já utilizado.';if($erros)jsonResponse(['ok'=>false,'erros'=>$erros],422);
$pdo->beginTransaction();$pdo->prepare('UPDATE af_usuarios SET nome=?,username=?,email=?,atualizado_em=NOW() WHERE id=?')->execute([$nome,$username,$email,$u['id']]);garantirPerfil($pdo,(int)$u['id']);$pdo->prepare('UPDATE af_perfis SET bio=?,cidade=?,estado=?,pais=?,perfil_privado=?,atualizado_em=NOW() WHERE usuario_id=?')->execute([$bio,$cidade,$estado,$pais,$perfilPrivado,$u['id']]);$pdo->commit();$st=$pdo->prepare('SELECT u.*,p.bio,p.cidade,p.estado,p.pais,p.perfil_privado,a.data_nascimento,a.pais_residencia,a.tipo_conta,a.status_idade,a.idade_declarada FROM af_usuarios u LEFT JOIN af_perfis p ON p.usuario_id=u.id LEFT JOIN af_user_age_profiles a ON a.usuario_id=u.id WHERE u.id=?');$st->execute([$u['id']]);$out=$st->fetch();unset($out['senha'],$out['token_recuperacao'],$out['token_expira']);$out['foto_url']=urlAvatar($out['foto_perfil']??null,$out['foto_externa']??null);jsonResponse(['ok'=>true,'usuario'=>$out,'age'=>afResumoIdade($pdo,(int)$u['id'])]);
