"VISITANTE", "homeName" => "HOME", "visitorScore" => 0, "homeScore" => 0, "inning" => 1, "half" => "TOP", "balls" => 0, "strikes" => 0, "outs" => 0, "base1" => false, "base2" => false, "base3" => false ]; function readScoreData($file, $defaultState){ if(!file_exists($file)){ file_put_contents($file, json_encode($defaultState, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); return $defaultState; } $raw = file_get_contents($file); $data = json_decode($raw, true); if(!is_array($data)){ file_put_contents($file, json_encode($defaultState, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); return $defaultState; } return array_merge($defaultState, $data); } function sendJson($data){ header('Content-Type: application/json; charset=utf-8'); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); echo json_encode($data, JSON_UNESCAPED_UNICODE); exit; } if(isset($_GET['api']) && $_GET['api'] === 'load'){ sendJson(readScoreData($dataFile, $defaultState)); } if(isset($_GET['api']) && $_GET['api'] === 'save'){ $input = file_get_contents('php://input'); $data = json_decode($input, true); if(!is_array($data)){ http_response_code(400); sendJson(["ok" => false, "error" => "Datos inválidos"]); } $clean = [ "visitorName" => substr(trim($data["visitorName"] ?? "VISITANTE"), 0, 30), "homeName" => substr(trim($data["homeName"] ?? "HOME"), 0, 30), "visitorScore" => max(0, intval($data["visitorScore"] ?? 0)), "homeScore" => max(0, intval($data["homeScore"] ?? 0)), "inning" => max(1, intval($data["inning"] ?? 1)), "half" => (($data["half"] ?? "TOP") === "BOT") ? "BOT" : "TOP", "balls" => max(0, min(3, intval($data["balls"] ?? 0))), "strikes" => max(0, min(2, intval($data["strikes"] ?? 0))), "outs" => max(0, min(2, intval($data["outs"] ?? 0))), "base1" => !empty($data["base1"]), "base2" => !empty($data["base2"]), "base3" => !empty($data["base3"]) ]; $saved = file_put_contents($dataFile, json_encode($clean, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); if($saved === false){ http_response_code(500); sendJson(["ok" => false, "error" => "No se pudo guardar score.json. Revisa permisos de carpeta."]); } sendJson(["ok" => true, "state" => $clean]); } $isObs = isset($_GET['obs']) && $_GET['obs'] == '1'; ?>