<?php
require_once __DIR__ . '/../includes/header.php';
$cfgFile = __DIR__ . '/../api/check_update.json';
$uploadDir = __DIR__ . '/../api/apk';
if (!is_dir($uploadDir)) @mkdir($uploadDir, 0775, true);
function up_base_url(): string { $https=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||(($_SERVER['HTTP_X_FORWARDED_PROTO']??'')==='https'); $origin=rtrim(($https?'https':'http').'://'.($_SERVER['HTTP_HOST']??'localhost'),'/'); $script=str_replace('\\','/',(string)($_SERVER['SCRIPT_NAME']??'/atualizacao.php')); $root=rtrim((string)preg_replace('#/controllers/[^/]+\.php$#','',$script),'/'); $root=rtrim((string)preg_replace('#/[^/]+\.php$#','',$root),'/'); return $origin.(($root===''||$root==='/')?'':$root); }
function up_version_code(string $version): int { if (preg_match('/\d+/', $version, $m)) return max(1,(int)$m[0]); return 1; }
function up_default(): array { return ['status'=>'ok','tv'=>['active'=>false,'version_code'=>1,'version_name'=>'1.0','titulo'=>'Versão incompatível','mensagem'=>'A versão instalada é diferente da versão liberada no painel.','apk_url'=>'','force'=>true],'mobile'=>['active'=>false,'version_code'=>1,'version_name'=>'1.0','titulo'=>'Versão incompatível','mensagem'=>'A versão instalada é diferente da versão liberada no painel.','apk_url'=>'','force'=>true]]; }
function up_load(string $file): array { if(!is_file($file))return up_default();$j=json_decode((string)@file_get_contents($file),true);return is_array($j)?array_replace_recursive(up_default(),$j):up_default(); }
$cfg=up_load($cfgFile);$msg='';$err='';
if(($_SERVER['REQUEST_METHOD']??'')==='POST'){
 $target=in_array(($_POST['target']??'tv'),['tv','mobile'],true)?$_POST['target']:'tv';
 $version=trim((string)($_POST['version_name']??'')); if($version==='')$err='Informe a Versão esperada do aplicativo.';
 $apkUrl=trim((string)($_POST['apk_url']??''));
 if(!$err && !empty($_FILES['apk_file']['tmp_name'])&&is_uploaded_file($_FILES['apk_file']['tmp_name'])){ $name=$target.'_update_'.time().'.apk';$dest=$uploadDir.'/'.$name;if(@move_uploaded_file($_FILES['apk_file']['tmp_name'],$dest)){@chmod($dest,0644);$apkUrl=up_base_url().'/api/apk/'.$name;}else{$err='Falha ao enviar APK.';} }
 $cfg[$target]=['active'=>isset($_POST['active']),'version_code'=>up_version_code($version),'version_name'=>$version,'titulo'=>trim((string)($_POST['titulo']??'Versão incompatível')),'mensagem'=>trim((string)($_POST['mensagem']??'A versão instalada é diferente da versão liberada no painel.')),'apk_url'=>$apkUrl,'force'=>isset($_POST['force']),'match_mode'=>'exact','updated_at'=>time()];
 if($err===''){if(@file_put_contents($cfgFile,json_encode($cfg,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT),LOCK_EX)===false)$err='Não foi possível salvar check_update.json.';else$msg='Configuração salva. O app exigirá que a versão instalada seja exatamente igual à versão do painel.';}
}
$tv=$cfg['tv'];$mobile=$cfg['mobile'];$selectedTarget=(isset($_POST['target'])&&in_array($_POST['target'],['tv','mobile'],true))?$_POST['target']:'tv';
?>
<div class="update-wrap"><div class="card update-card"><div class="update-head"><div class="update-title"><div class="update-ic"><i class="bi bi-cloud-arrow-up-fill"></i></div><div><h5 class="m-0 fw-bold">Atualização do aplicativo</h5><small class="text-muted fw-bold">TV e celular devem ter exatamente a mesma Versão configurada para cada destino.</small></div></div><span class="badge bg-primary">API v4</span></div><div class="card-body">
<?php if($msg):?><div class="alert alert-success"><?=htmlspecialchars($msg,ENT_QUOTES,'UTF-8')?></div><?php endif;?><?php if($err):?><div class="alert alert-danger"><?=htmlspecialchars($err,ENT_QUOTES,'UTF-8')?></div><?php endif;?>
<div class="version-note mb-3"><i class="bi bi-shield-check"></i> Se a versão instalada for menor <strong>ou maior</strong> que a versão do painel, o aplicativo mostrará o título e a mensagem configurados abaixo.</div>
<form method="post" enctype="multipart/form-data" class="row g-3">
<div class="col-md-4"><label class="form-label fw-bold">Destino</label><select class="form-select" name="target" id="updateTarget"><option value="tv" <?=$selectedTarget==='tv'?'selected':''?>>TV Box / Android TV</option><option value="mobile" <?=$selectedTarget==='mobile'?'selected':''?>>Celular</option></select></div>
<div class="col-md-2"><label class="form-label fw-bold">Ativo</label><div class="form-check form-switch mt-2"><input class="form-check-input" type="checkbox" name="active" id="updateActive"><label class="form-check-label">verificar versão</label></div></div>
<div class="col-md-3"><label class="form-label fw-bold">Versão</label><input class="form-control" name="version_name" id="updateVersionName" placeholder="Ex: 31.0" required></div>
<div class="col-md-3"><label class="form-label fw-bold">Obrigatório</label><div class="form-check form-switch mt-2"><input class="form-check-input" type="checkbox" name="force" id="updateForce"><label class="form-check-label">bloquear até atualizar</label></div></div>
<div class="col-md-6"><label class="form-label fw-bold">Título</label><input class="form-control" name="titulo" id="updateTitle"></div><div class="col-md-6"><label class="form-label fw-bold">URL do APK</label><input class="form-control" name="apk_url" id="updateApkUrl" placeholder="https://.../app.apk"></div>
<div class="col-12"><label class="form-label fw-bold">Mensagem</label><textarea class="form-control" name="mensagem" id="updateMessage" rows="3"></textarea></div>
<div class="col-md-8"><label class="form-label fw-bold">Upload do APK</label><input type="file" accept=".apk,application/vnd.android.package-archive" class="form-control" name="apk_file"></div><div class="col-md-4 d-flex align-items-end"><button class="btn btn-primary w-100" type="submit"><i class="bi bi-save2"></i> Salvar atualização</button></div>
</form><hr><details><summary class="fw-bold">Ver JSON atual</summary><div class="json-preview mt-2"><?=htmlspecialchars(json_encode($cfg,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT),ENT_QUOTES,'UTF-8')?></div></details>
</div></div></div>
<textarea id="updateConfigData" class="d-none" aria-hidden="true"><?= htmlspecialchars(json_encode(['tv' => $tv, 'mobile' => $mobile], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></textarea>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
