<?php
require_once __DIR__.'/../config/config.php';
require_once __DIR__.'/../config/database.php';
require_once __DIR__.'/../includes/functions.php';
require_once __DIR__.'/../includes/viral_functions.php';
$ref=(string)($_GET['ref']??$_POST['ref']??'');if($ref!=='')afCapturarConviteViral($pdo,$ref);
$continue=(string)($_GET['continue']??$_POST['continue']??($_SESSION['af_after_login']??''));
if($continue!=='' && (!str_starts_with($continue,'/') || str_starts_with($continue,'//') || str_contains($continue,'\\'))) $continue='';
if(isLoggedIn()){header('Location: '.SITE_URL.($continue?:'/pages/home.php'));exit;}
$destino=$continue?:'/pages/home.php';
if($continue!=='')$_SESSION['af_after_login']=$continue;
$erros=[];$fieldErrors=[];$activeTab='login';

function afAuthRegisterUsernameNormalize(string $value): string {
    $value = sanitize($value);
    $value = trim($value);
    if (function_exists('transliterator_transliterate')) {
        $value = transliterator_transliterate('Any-Latin; Latin-ASCII', $value) ?: $value;
    } elseif (function_exists('iconv')) {
        $converted = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value);
        if ($converted !== false) $value = $converted;
    }
    $value = function_exists('mb_strtolower') ? mb_strtolower($value, 'UTF-8') : strtolower($value);
    $value = preg_replace('/\s+/', '_', $value) ?? $value;
    $value = preg_replace('/[^a-z0-9_]/', '', $value) ?? $value;
    $value = preg_replace('/_+/', '_', $value) ?? $value;
    $value = trim($value, '_');
    return substr($value, 0, 30);
}

function afAuthAddFieldError(array &$erros, array &$fieldErrors, string $field, string $message, ?string $summary = null): void {
    $fieldErrors[$field][] = $message;
    $summary = $summary ?: $message;
    if (!in_array($summary, $erros, true)) $erros[] = $summary;
}

function afAuthFieldClass(array $fieldErrors, string $field): string {
    return !empty($fieldErrors[$field]) ? ' has-error' : '';
}

function afAuthFieldErrorHtml(array $fieldErrors, string $field): string {
    if (empty($fieldErrors[$field])) return '';
    $items = array_map('esc', $fieldErrors[$field]);
    return '<small class="form-error form-error--server" id="'.$field.'-error">⚠️ '.implode(' ', $items).'</small>';
}

if($_SERVER['REQUEST_METHOD']==='POST'){
    $action=$_POST['action']??'';$activeTab=$action==='register'?'register':'login';
    if(!validarCsrfToken($_POST[CSRF_TOKEN_NAME]??''))$erros[]='Sessão expirada. Recarregue a página.';
    elseif($action==='login'){
        $login=sanitize($_POST['login']??'');$senha=(string)($_POST['senha']??'');
        if(!$login||!$senha)$erros[]='Informe usuário/e-mail e senha.';
        if(!$erros){
            try{
                afRateLimitOrFail($pdo,'login_ip',clientIp(),8,900,900);
                afRateLimitOrFail($pdo,'login_account',strtolower($login).'|'.clientIp(),6,900,1200);
                $campo=filter_var($login,FILTER_VALIDATE_EMAIL)?'email':'username';
                $st=$pdo->prepare("SELECT * FROM af_usuarios WHERE $campo=? LIMIT 1");$st->execute([$login]);$u=$st->fetch();
                if(!$u||!password_verify($senha,$u['senha'])){
                    afRegistrarTentativaLogin($pdo,$login,false,$u?(int)$u['id']:null,'credenciais_invalidas');
                    $erros[]='Usuário/e-mail ou senha incorretos.';
                }else{
                    afAssertContaPermitida($pdo,(int)$u['id']);
                    afRegistrarTentativaLogin($pdo,$login,true,(int)$u['id'],'login_ok');
                    afResetRateLimit($pdo,'login_account',strtolower($login).'|'.clientIp());
                    criarSessaoAutenticada($pdo,$u,!empty($_POST['lembrar']));recarregarSessaoUsuario($pdo,(int)$u['id']);if(!afResumoIdade($pdo,(int)$u['id'])['completo']){$_SESSION['af_after_age']=$destino;unset($_SESSION['af_after_login']);header('Location: '.SITE_URL.'/pages/verificar-idade.php');exit;}unset($_SESSION['af_after_login']);header('Location: '.SITE_URL.$destino);exit;
                }
            }catch(Throwable $e){$erros[]=$e->getMessage();}
        }
    }elseif($action==='register'){
        $nome=sanitize($_POST['nome']??'');
        $username=afAuthRegisterUsernameNormalize((string)($_POST['username']??''));
        $_POST['username']=$username;
        $email=strtolower(sanitize($_POST['email']??''));
        $_POST['email']=$email;
        $senha=(string)($_POST['senha']??'');
        $confirmar=(string)($_POST['confirmar']??'');
        $data_nascimento=(string)($_POST['data_nascimento']??'');
        $pais_conta=sanitize($_POST['pais_conta']??'Brasil')?:'Brasil';
        $uso_conta=(string)($_POST['uso_conta']??'player');

        if(mb_strlen($nome)<2||mb_strlen($nome)>100)afAuthAddFieldError($erros,$fieldErrors,'nome','Informe um nome com 2 a 100 caracteres.','Corrija o campo nome.');
        if(!preg_match('/^[a-z0-9_]{3,30}$/',$username))afAuthAddFieldError($erros,$fieldErrors,'username','Use 3 a 30 caracteres. Pode usar letras minúsculas, números e underline (_). Exemplo: marcelino_123.','Corrija o campo usuário.');
        if(!filter_var($email,FILTER_VALIDATE_EMAIL))afAuthAddFieldError($erros,$fieldErrors,'email','Digite um e-mail válido. Exemplo: nome@email.com.','Corrija o campo e-mail.');
        if(strlen($senha)<8)afAuthAddFieldError($erros,$fieldErrors,'senha','A senha precisa ter pelo menos 8 caracteres.','Corrija o campo senha.');
        if($senha!==$confirmar)afAuthAddFieldError($erros,$fieldErrors,'confirmar','Digite a mesma senha nos dois campos.','As senhas não coincidem.');
        try{$declaracaoIdade=afValidarDeclaracaoIdade($data_nascimento,$pais_conta,$uso_conta);}catch(Throwable $e){afAuthAddFieldError($erros,$fieldErrors,'data_nascimento',$e->getMessage(),'Corrija a data de nascimento.');}
        if(empty($_POST['confirmar_idade']))afAuthAddFieldError($erros,$fieldErrors,'confirmar_idade','Confirme que a data de nascimento informada é verdadeira.','Confirme a data de nascimento.');
        if(empty($_POST['aceitar_termos_privacidade']))afAuthAddFieldError($erros,$fieldErrors,'aceitar_termos_privacidade','Você precisa aceitar os Termos de Uso e o Aviso de Privacidade.','Aceite os termos e a privacidade.');
        if(!afPrivacyTableExists($pdo,'af_legal_documents'))$erros[]='A migração da Etapa 21 ainda não foi importada.';

        if(!$erros){
            $st=$pdo->prepare('SELECT id FROM af_usuarios WHERE username=? LIMIT 1');
            $st->execute([$username]);
            if($st->fetchColumn())afAuthAddFieldError($erros,$fieldErrors,'username','Este usuário já está em uso. Tente outro, por exemplo: '.$username.'_123.','Usuário já cadastrado.');
        }
        if(!$erros){
            $st=$pdo->prepare('SELECT id FROM af_usuarios WHERE email=? LIMIT 1');
            $st->execute([$email]);
            if($st->fetchColumn())afAuthAddFieldError($erros,$fieldErrors,'email','Este e-mail já possui cadastro. Use outro e-mail ou entre na sua conta.','E-mail já cadastrado.');
        }
        if(!$erros){
            try{afRateLimitOrFail($pdo,'register_ip',clientIp(),4,3600,3600);$u=criarUsuarioLocal($pdo,compact('nome','username','email','senha','data_nascimento','pais_conta','uso_conta'),$_FILES['foto_perfil']??null);afRecordRegistrationLegalAcceptances($pdo,(int)$u['id'],'web_registration');afRegistrarCadastroIndicado($pdo,(int)$u['id']);afLogSeguranca($pdo,'cadastro_conta',0,['provider'=>'local'],(int)$u['id']);criarSessaoAutenticada($pdo,$u,true);recarregarSessaoUsuario($pdo,(int)$u['id']);setFlash('success','Conta criada! Seu ID é '.$u['aura_id'].'.');unset($_SESSION['af_after_login']);header('Location: '.SITE_URL.$destino);exit;}
            catch(Throwable $e){$erros[]=APP_DEBUG?$e->getMessage():'Não foi possível criar sua conta.';}
        }
    }
}
$pageTitle='Entrar';$showNav=false;require_once __DIR__.'/../includes/header.php';
?>
<div class="auth-page"><div class="auth-box">
  <div class="auth-logo"><div style="font-size:48px">🌀</div><div class="brand-gradient">AURA FARMING</div><p>ENTRE. FARME. EXPANDA SUA AURA.</p></div>
  <?=renderFlash()?>
  <?php if($erros):?><div class="flash flash--error"><span>✕</span><ul class="error-list"><?php foreach($erros as $e):?><li><?=esc($e)?></li><?php endforeach?></ul></div><?php endif?>
  <div class="auth-tabs"><button class="auth-tab <?=$activeTab==='login'?'active':''?>" data-tab="login">Entrar</button><button class="auth-tab <?=$activeTab==='register'?'active':''?>" data-tab="register">Criar conta</button></div>

  <div id="tab-login" class="tab-content <?=$activeTab==='login'?'active':''?>">
    <h1 class="auth-title">Entre na sua conta</h1><p class="auth-subtitle">Acesse sua jornada e continue evoluindo.</p>
    <form method="post"><?=camposCsrf()?><input type="hidden" name="continue" value="<?=esc($continue)?>"><input type="hidden" name="ref" value="<?=esc($ref)?>"><input type="hidden" name="action" value="login">
      <div class="form-group"><div class="form-field"><span class="field-icon">👤</span><input class="form-input" name="login" placeholder="Usuário ou e-mail" value="<?=esc($_POST['login']??'')?>" autocomplete="username" required></div></div>
      <div class="form-group"><div class="form-field"><span class="field-icon">🔒</span><input class="form-input" type="password" name="senha" placeholder="Sua senha" autocomplete="current-password" required><button type="button" class="btn-eye">👁️</button></div></div>
      <div class="auth-options"><label><input type="checkbox" name="lembrar" value="1" checked> Manter conectado</label><a href="<?=SITE_URL?>/auth/recuperar.php">Esqueci minha senha</a></div>
      <button class="btn btn-primary" type="submit">ENTRAR</button>
    </form>
    <div class="divider">ou continue com</div>
    <div class="auth-social-row">
      <a class="btn btn-google" href="<?=SITE_URL?>/auth/google.php">
        <svg width="20" height="20" viewBox="0 0 48 48" aria-hidden="true" focusable="false">
          <path fill="#FFC107" d="M43.611 20H42V20H24v8h11.303C33.654 32.657 29.219 36 24 36c-6.627 0-12-5.373-12-12s5.373-12 12-12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4 12.955 4 4 12.955 4 24s8.955 20 20 20 20-8.955 20-20c0-1.341-.138-2.65-.389-4z"/>
          <path fill="#FF3D00" d="m6.306 14.691 6.571 4.819C14.655 15.108 18.961 12 24 12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4c-7.682 0-14.344 4.337-17.694 10.691z"/>
          <path fill="#4CAF50" d="M24 44c5.166 0 9.86-1.977 13.409-5.192l-6.19-5.238C29.143 35.091 26.616 36 24 36c-5.198 0-9.619-3.317-11.283-7.946l-6.522 5.025C9.505 39.556 16.227 44 24 44z"/>
          <path fill="#1976D2" d="M43.611 20H42V20H24v8h11.303c-.792 2.237-2.231 4.166-4.087 5.571l6.19 5.238C36.971 39.205 44 34 44 24c0-1.341-.138-2.65-.389-4z"/>
        </svg>
        <span>Google</span>
      </a>
      <a class="btn btn-apple" href="<?=SITE_URL?>/auth/apple.php">
        <svg width="19" height="22" viewBox="0 0 384 512" aria-hidden="true" focusable="false" fill="currentColor">
          <path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5c0 26.2 4.8 53.2 14.4 81 12.8 36.7 59 126.7 108.8 125.2 26-.6 44.4-18.4 78.2-18.4 32.8 0 49.8 18.4 78.7 18.4 50.2-.7 92.4-82.5 104.6-119.3-67.2-31.6-63.7-91.5-66-91.7zM260.5 104.5c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/>
        </svg>
        <span>Apple</span>
      </a>
    </div>
  </div>

  <div id="tab-register" class="tab-content <?=$activeTab==='register'?'active':''?>">
    <h1 class="auth-title">Crie sua conta</h1><p class="auth-subtitle">Seu ID AURA será gerado automaticamente.</p>
    <form method="post" enctype="multipart/form-data" class="js-register-form" novalidate><?=camposCsrf()?><input type="hidden" name="continue" value="<?=esc($continue)?>"><input type="hidden" name="ref" value="<?=esc($ref)?>"><input type="hidden" name="action" value="register">
      <label class="register-avatar" for="register-avatar-input"><img id="register-avatar-preview" src="<?=DEFAULT_AVATAR?>" alt="Foto"><span>Adicionar foto de perfil</span></label><input hidden id="register-avatar-input" type="file" name="foto_perfil" accept="image/jpeg,image/png,image/webp">
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'nome')?>">
        <div class="form-field"><span class="field-icon">✨</span><input class="form-input" type="text" name="nome" placeholder="Seu nome" value="<?=esc($_POST['nome']??'')?>" autocomplete="name" required></div>
        <?=afAuthFieldErrorHtml($fieldErrors,'nome')?>
      </div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'username')?>">
        <div class="form-field"><span class="field-icon">👤</span><input id="register-username" class="form-input" type="text" name="username" placeholder="Usuário (ex: marcelino_123)" value="<?=esc($_POST['username']??'')?>" autocomplete="username" autocapitalize="off" spellcheck="false" maxlength="30" required></div>
        <small class="form-help" id="username-help">Use letras minúsculas, números e underline. Se digitar maiúscula, o sistema converte sozinho.</small>
        <?=afAuthFieldErrorHtml($fieldErrors,'username')?>
      </div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'email')?>">
        <div class="form-field"><span class="field-icon">📧</span><input class="form-input" type="email" name="email" placeholder="Seu e-mail" value="<?=esc($_POST['email']??'')?>" autocomplete="email" required></div>
        <?=afAuthFieldErrorHtml($fieldErrors,'email')?>
      </div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'data_nascimento')?>"><label class="form-label" for="data-nascimento">Data de nascimento</label><div class="form-field"><span class="field-icon">📅</span><input id="data-nascimento" class="form-input" type="date" name="data_nascimento" value="<?=esc($_POST['data_nascimento']??'')?>" max="<?=date('Y-m-d')?>" autocomplete="bday" required></div><small class="age-form-help">Usamos esta informação para aplicar as proteções corretas da conta.</small><?=afAuthFieldErrorHtml($fieldErrors,'data_nascimento')?></div>
      <div class="form-group"><label class="form-label" for="pais-conta">País de residência</label><div class="form-field"><span class="field-icon">🌎</span><input id="pais-conta" class="form-input" name="pais_conta" value="<?=esc($_POST['pais_conta']??'Brasil')?>" maxlength="80" autocomplete="country-name" required></div></div>
      <div class="form-group"><label class="form-label" for="uso-conta">Como você usará o Aura Farming?</label><div class="form-field"><span class="field-icon">🛡️</span><select id="uso-conta" class="form-input age-select" name="uso_conta" required><option value="player" <?=($_POST['uso_conta']??'player')==='player'?'selected':''?>>Como jogador</option><option value="guardian" <?=($_POST['uso_conta']??'')==='guardian'?'selected':''?>>Como responsável legal</option></select></div></div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'confirmar_idade')?>"><label class="age-declaration-check"><input type="checkbox" name="confirmar_idade" value="1" <?=!empty($_POST['confirmar_idade'])?'checked':''?> required><span>Confirmo que a data de nascimento informada é verdadeira. Contas de menores terão câmera, Farm, Battle, transmissão e compartilhamento bloqueados até autorização do responsável.</span></label><?=afAuthFieldErrorHtml($fieldErrors,'confirmar_idade')?></div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'aceitar_termos_privacidade')?>"><label class="age-declaration-check legal-registration-check"><input type="checkbox" name="aceitar_termos_privacidade" value="1" <?=!empty($_POST['aceitar_termos_privacidade'])?'checked':''?> required><span>Li e aceito os <a href="<?=SITE_URL?>/pages/termos-de-uso.php" target="_blank" rel="noopener">Termos de Uso</a> e o <a href="<?=SITE_URL?>/pages/privacidade.php" target="_blank" rel="noopener">Aviso de Privacidade</a>. Para contas de menores, também li o <a href="<?=SITE_URL?>/pages/privacidade-menores.php" target="_blank" rel="noopener">aviso específico</a>.</span></label><?=afAuthFieldErrorHtml($fieldErrors,'aceitar_termos_privacidade')?></div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'senha')?>"><div class="form-field"><span class="field-icon">🔒</span><input class="form-input" type="password" name="senha" placeholder="Senha (mínimo 8 caracteres)" autocomplete="new-password" required><button type="button" class="btn-eye">👁️</button></div><?=afAuthFieldErrorHtml($fieldErrors,'senha')?></div>
      <div class="form-group<?=afAuthFieldClass($fieldErrors,'confirmar')?>"><div class="form-field"><span class="field-icon">🔒</span><input class="form-input" type="password" name="confirmar" placeholder="Confirme a senha" autocomplete="new-password" required></div><?=afAuthFieldErrorHtml($fieldErrors,'confirmar')?></div>
      <button class="btn btn-primary" type="submit">CRIAR CONTA</button>
    </form>
    <div class="divider">ou crie sua conta com</div>
    <div class="auth-social-row">
      <a class="btn btn-google" href="<?=SITE_URL?>/auth/google.php">
        <svg width="20" height="20" viewBox="0 0 48 48" aria-hidden="true" focusable="false">
          <path fill="#FFC107" d="M43.611 20H42V20H24v8h11.303C33.654 32.657 29.219 36 24 36c-6.627 0-12-5.373-12-12s5.373-12 12-12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4 12.955 4 4 12.955 4 24s8.955 20 20 20 20-8.955 20-20c0-1.341-.138-2.65-.389-4z"/>
          <path fill="#FF3D00" d="m6.306 14.691 6.571 4.819C14.655 15.108 18.961 12 24 12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4c-7.682 0-14.344 4.337-17.694 10.691z"/>
          <path fill="#4CAF50" d="M24 44c5.166 0 9.86-1.977 13.409-5.192l-6.19-5.238C29.143 35.091 26.616 36 24 36c-5.198 0-9.619-3.317-11.283-7.946l-6.522 5.025C9.505 39.556 16.227 44 24 44z"/>
          <path fill="#1976D2" d="M43.611 20H42V20H24v8h11.303c-.792 2.237-2.231 4.166-4.087 5.571l6.19 5.238C36.971 39.205 44 34 44 24c0-1.341-.138-2.65-.389-4z"/>
        </svg>
        <span>Google</span>
      </a>
      <a class="btn btn-apple" href="<?=SITE_URL?>/auth/apple.php">
        <svg width="19" height="22" viewBox="0 0 384 512" aria-hidden="true" focusable="false" fill="currentColor">
          <path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5c0 26.2 4.8 53.2 14.4 81 12.8 36.7 59 126.7 108.8 125.2 26-.6 44.4-18.4 78.2-18.4 32.8 0 49.8 18.4 78.7 18.4 50.2-.7 92.4-82.5 104.6-119.3-67.2-31.6-63.7-91.5-66-91.7zM260.5 104.5c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/>
        </svg>
        <span>Apple</span>
      </a>
    </div>
  </div>
</div></div>
<?php require_once __DIR__.'/../includes/footer.php';?>
