<?php
// Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva
// Endpoint de upload OTA — recebe pacote.zip + versao.json via HTTP POST.
// Colar em: C:\Fire-Updates\public\upload.php
// URL: http://177.23.184.123:8084/upload.php

declare(strict_types=1);

// =========================================================================
// SENHA — troca essa string pelo que quiser. Tem que bater com o que o
// publicador envia no header X-Publish-Token.
// =========================================================================
const TOKEN = 'fire-publica-2026-bi-master-67d8';

// Destino dos arquivos (mesma pasta que o BI cliente lê via versao.json)
$destino = __DIR__ . DIRECTORY_SEPARATOR . 'atualizacoes';
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;
}

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

// =========================================================================
// Salva versao.json
// =========================================================================
$versaoTmp  = $_FILES['versao']['tmp_name'];
$versaoDst  = $destino . DIRECTORY_SEPARATOR . 'versao.json';
if (!@move_uploaded_file($versaoTmp, $versaoDst)) {
    http_response_code(500);
    echo json_encode(['erro' => 'Falha ao salvar versao.json em ' . $versaoDst]); exit;
}

// =========================================================================
// Backup do histórico (opcional, não falha se der erro)
// =========================================================================
$json = @json_decode((string)@file_get_contents($versaoDst), true);
if (is_array($json) && !empty($json['versao'])) {
    $hist = __DIR__ . DIRECTORY_SEPARATOR . 'historico' . DIRECTORY_SEPARATOR . 'v' . $json['versao'];
    if (!is_dir($hist)) { @mkdir($hist, 0777, true); }
    @copy($pacoteDst, $hist . DIRECTORY_SEPARATOR . 'pacote.zip');
    @copy($versaoDst, $hist . DIRECTORY_SEPARATOR . 'versao.json');
}

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