<?php
declare(strict_types=1);

// ============================================================================
// scripts_get.php — PROXY vers l'API MyTruck (NAS)
//
// Cette version remplace l'ancien scripts_get.php qui lisait directement la
// DB alwaysdata. Désormais, on délègue à l'API MyTruck du NAS qui sert de
// source unique de vérité pour les droits scripts XDock+.
//
// L'extension Edge n'a RIEN à changer : la signature de la réponse est
// strictement identique au PHP legacy (object features {key: true/false, ...}).
//
// Déploiement : remplace ce fichier sur gp-eff.fr/xdock/scripts_get.php
// ============================================================================

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

// === Configuration =========================================================
$MYTRUCK_API_BASE = 'https://appli.gp-eff.fr/api'; // URL de ton backend MyTruck
$MYTRUCK_API_KEY  = 'xdockplus';                   // doit matcher XDOCKPLUS_API_KEY côté .env MyTruck

// Liste de référence (même ordre que l'ancien scripts_get.php) — sert de
// fallback si le proxy renvoie une réponse partielle ou en cas d'erreur réseau.
$FEATURE_KEYS = [
  'printA3', 'ui_theme', 'nb_palf', 'em_mode0', 'abcolor', 'badgemap',
  'barcode_zone_porte', 'barcode_p', 'auto_resume', 'panneau_controle',
  'jabber', 'park_stats', 'controle', 'correcteur', 'destinations',
  'pdf_sm', 'emdestination', 'histo_map_porte', 'contacts', 'icone_cs',
  'pastille_em', 'recherche_em_sm', 'reliquats', 'autoblock_daemon',
  'portail', 'synthese',
];

function out(array $data, int $code = 200): void {
  http_response_code($code);
  echo json_encode($data, JSON_UNESCAPED_UNICODE);
  exit;
}

function default_features(array $keys): array {
  $out = [];
  foreach ($keys as $k) $out[$k] = false;
  return $out;
}

// === Lecture des paramètres entrants =======================================
$xdockEmail = trim(strtolower((string)($_GET['xdock_email'] ?? '')));

// X-API-Key entrant (depuis l'extension)
$apiKey = '';
if (isset($_SERVER['HTTP_X_API_KEY'])) {
  $apiKey = (string)$_SERVER['HTTP_X_API_KEY'];
} elseif (function_exists('getallheaders')) {
  $h = getallheaders();
  if (is_array($h)) {
    foreach ($h as $k => $v) {
      if (strtolower((string)$k) === 'x-api-key') { $apiKey = (string)$v; break; }
    }
  }
}
$apiKey = trim($apiKey);

// === Validation locale (avant de proxifier) ================================
if ($apiKey === '' || !hash_equals($MYTRUCK_API_KEY, $apiKey)) {
  out([
    'ok' => false,
    'error' => 'bad_api_key',
    'features' => (object)default_features($FEATURE_KEYS),
  ], 401);
}

if ($xdockEmail === '') {
  out([
    'ok' => false,
    'error' => 'not_authenticated',
    'features' => (object)default_features($FEATURE_KEYS),
  ], 401);
}

// === Appel vers l'API MyTruck =============================================
$url = $MYTRUCK_API_BASE . '/xdock-scripts/by-email?xdock_email=' . urlencode($xdockEmail);

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT        => 5,
  CURLOPT_CONNECTTIMEOUT => 3,
  CURLOPT_HTTPHEADER     => [
    'X-API-Key: ' . $MYTRUCK_API_KEY,
    'Accept: application/json',
  ],
  // Tolérant si le NAS utilise un cert auto-signé (sinon retire ces 2 lignes)
  CURLOPT_SSL_VERIFYPEER => true,
  CURLOPT_SSL_VERIFYHOST => 2,
]);

$response = curl_exec($ch);
$httpCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErr  = curl_error($ch);
curl_close($ch);

if ($response === false || $httpCode === 0) {
  out([
    'ok' => false,
    'error' => 'proxy_network_error',
    'details' => $curlErr ?: 'unreachable',
    'features' => (object)default_features($FEATURE_KEYS),
  ], 502);
}

$decoded = json_decode($response, true);
if (!is_array($decoded)) {
  out([
    'ok' => false,
    'error' => 'proxy_bad_json',
    'http_code' => $httpCode,
    'features' => (object)default_features($FEATURE_KEYS),
  ], 502);
}

// === Réponse passthrough ==================================================
// On forward le status code MyTruck (401/403/500/200) et on s'assure que la
// clé `features` est bien un OBJET avec TOUTES les clés (l'extension parse
// ce shape exact).
$featuresIn = $decoded['features'] ?? null;
$features = default_features($FEATURE_KEYS);
if (is_array($featuresIn)) {
  foreach ($featuresIn as $k => $v) {
    if (array_key_exists($k, $features)) {
      $features[$k] = (bool)$v;
    }
  }
}
$decoded['features'] = (object)$features;

http_response_code($httpCode ?: 200);
echo json_encode($decoded, JSON_UNESCAPED_UNICODE);
