<?php
// Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva
// Endpoint de upload OTA do Gestão PLD (ITA Mob).
// Espelho do upload.php do BI, mas salva em C:\Fire-Updates\public\itamob\
//
// Colar em: C:\Fire-Updates\public\upload_itamob.php
// URL: http://177.23.184.123:8084/upload_itamob.php
//
// POST multipart/form-data:
//   pacote   → arquivo pld-vX.Y.Z.zip
//   versao   → arquivo latest.json (contendo {version, sha256, url_download,...})
//   header X-Publish-Token = <token>

declare(strict_types=1);

// =========================================================================
// TOKEN — troca essa string. Tem que bater com o publicar.ps1
// =========================================================================
const TOKEN = 'itamob-publica-2026-master-pld-8a4f';

// Destino: pasta itamob/ (mesma que o app cliente lê via latest.json)
$destino = __DIR__ . DIRECTORY_SEPARATOR . 'itamob';
if (!is_dir($destino)) { @mkdir($destino, 0777, true); }

header('Content-Type: application/json; charset=utf-8');

// =========================================================================
// Validações
// =========================================================================
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['erro' => 'Use POST']); exit;
}

$token = $_SERVER['HTTP_X_PUBLISH_TOKEN'] ?? '';
if (!hash_equals(TOKEN, $token)) {
    http_response_code(401);
    echo json_encode(['erro' => 'Token invalido']); exit;
}

if (empty($_FILES['pacote']) || empty($_FILES['versao'])) {
    http_response_code(400);
    echo json_encode(['erro' => 'Faltam arquivos: pacote (zip) e/ou versao (json)']); exit;
}

// =========================================================================
// Lê JSON pra saber a versão (nome do arquivo do ZIP inclui a versão)
// =========================================================================
$versaoTmp = $_FILES['versao']['tmp_name'];
$jsonRaw   = @file_get_contents($versaoTmp);
$json      = @json_decode((string)$jsonRaw, true);
if (!is_array($json) || empty($json['version'])) {
    http_response_code(400);
    echo json_encode(['erro' => 'versao.json inválido (falta version)']); exit;
}
$versao = preg_replace('/[^0-9.]/', '', (string)$json['version']);

// =========================================================================
// Salva pld-vX.Y.Z.zip
// =========================================================================
$pacoteTmp = $_FILES['pacote']['tmp_name'];
$pacoteDst = $destino . DIRECTORY_SEPARATOR . 'pld-v' . $versao . '.zip';
if (!@move_uploaded_file($pacoteTmp, $pacoteDst)) {
    http_response_code(500);
    echo json_encode(['erro' => 'Falha ao salvar ' . $pacoteDst]); exit;
}

// =========================================================================
// Salva latest.json (nome que o cliente PLD espera)
// =========================================================================
$versaoDst = $destino . DIRECTORY_SEPARATOR . 'latest.json';
if (!@copy($versaoTmp, $versaoDst)) {
    http_response_code(500);
    echo json_encode(['erro' => 'Falha ao salvar ' . $versaoDst]); exit;
}

// =========================================================================
// Histórico
// =========================================================================
$hist = __DIR__ . DIRECTORY_SEPARATOR . 'historico-itamob'
      . DIRECTORY_SEPARATOR . 'v' . $versao;
if (!is_dir($hist)) { @mkdir($hist, 0777, true); }
@copy($pacoteDst, $hist . DIRECTORY_SEPARATOR . 'pld-v' . $versao . '.zip');
@copy($versaoDst, $hist . DIRECTORY_SEPARATOR . 'latest.json');

// =========================================================================
// Resposta
// =========================================================================
echo json_encode([
    'ok'            => true,
    'versao'        => $versao,
    'pacote_bytes'  => filesize($pacoteDst),
    'pacote_sha256' => hash_file('sha256', $pacoteDst),
    'destino'       => $destino,
    'recebido_em'   => date('c'),
]);
