<?php
require_once __DIR__.'/../../_bootstrap.php';
if($_SERVER['REQUEST_METHOD']!=='POST')jsonResponse(['ok'=>false,'erro'=>'Método não permitido.'],405);
$d=requestJson();$nome=sanitize($d['nome']??'');$username=strtolower(sanitize($d['username']??''));$email=strtolower(sanitize($d['email']??''));$senha=(string)($d['senha']??'');$data_nascimento=(string)($d['data_nascimento']??'');$pais_conta=sanitize($d['pais']??'Brasil')?:'Brasil';$uso_conta=(string)($d['uso_conta']??'player');$acceptTerms=!empty($d['accept_terms']);$acceptPrivacy=!empty($d['accept_privacy']);$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(strlen($senha)<8)$erros[]='Senha muito curta.';try{afValidarDeclaracaoIdade($data_nascimento,$pais_conta,$uso_conta);}catch(Throwable $e){$erros[]=$e->getMessage();}if(!$acceptTerms||!$acceptPrivacy)$erros[]='Aceite os Termos de Uso e o Aviso de Privacidade.';if(!afPrivacyTableExists($pdo,'af_legal_documents'))$erros[]='A migração da Etapa 21 ainda não foi importada.';
$st=$pdo->prepare('SELECT id FROM af_usuarios WHERE username=? OR email=? LIMIT 1');$st->execute([$username,$email]);if($st->fetchColumn())$erros[]='Usuário ou e-mail já cadastrado.';if($erros)jsonResponse(['ok'=>false,'erros'=>$erros],422);
try{afRateLimitOrFail($pdo,'api_register_ip',clientIp(),4,3600,3600);$u=criarUsuarioLocal($pdo,compact('nome','username','email','senha','data_nascimento','pais_conta','uso_conta'));afRecordRegistrationLegalAcceptances($pdo,(int)$u['id'],'api_registration');$token=criarSessaoAutenticada($pdo,$u,true);recarregarSessaoUsuario($pdo,(int)$u['id']);$out=usuarioAtual();jsonResponse(['ok'=>true,'token'=>$token,'usuario'=>$out,'age'=>afResumoIdade($pdo,(int)$u['id'])],201);}catch(Throwable $e){jsonResponse(['ok'=>false,'erro'=>APP_DEBUG?$e->getMessage():'Não foi possível criar a conta.'],500);}
