<?php
declare(strict_types=1);
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');
function respond(int $status, string $message): never {
    http_response_code($status);
    echo json_encode(['status' => $status === 200 ? 'success' : 'error', 'message' => $message], JSON_UNESCAPED_UNICODE);
    exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') respond(405, 'POST diperlukan');
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off') respond(403, 'HTTPS wajib');
$secret = getenv('SSE_SYNC_SECRET');
if (!is_string($secret) || strlen($secret) < 32) respond(503, 'Konfigurasi sinkronisasi belum tersedia');
$authorization = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if (!preg_match('/^Bearer (.+)$/', $authorization, $matches) || !hash_equals($secret, $matches[1])) respond(401, 'Tidak diizinkan');
$raw = file_get_contents('php://input', false, null, 0, 32769);
if (!is_string($raw) || strlen($raw) > 32768) respond(413, 'Data terlalu besar');
$data = json_decode($raw, true);
if (!is_array($data) || !isset($data['sekolah']) || !is_array($data['sekolah'])) respond(400, 'JSON tidak valid');
$school = $data['sekolah'];
$fields = [
'npsn',
    'nama_sekolah',
    'jenjang',
    'kode_aktivasi',
    'ip',
    'kode_kecamatan',
    'kode_kabupaten',
    'tanggal_aktivasi',
    'tanggal_downserver',
    'status',
    'surat_permohonan',
    'gambarsurat',
    'nama_kepala',
    'nip_kepala',
    'nomor_hp',
    'jumlah_siswa',
    'keterangan',
    'punya_domain',
    'nama_domain',
    'surat_permohonan_domain',
    'ktp_kepala',
    'setuju_subdomain',
    'setuju_biaya',
    'tanggal_mou',
    'nomor_mou'
];
if (empty($school['npsn']) || empty($school['nama_sekolah']) || empty($school['jenjang']) || empty($school['kode_aktivasi'])) respond(400, 'Identitas sekolah tidak lengkap');
if (!preg_match('/^[A-Za-z0-9]{1,20}$/', (string)$school['npsn'])) respond(400, 'NPSN tidak valid');
if (strlen((string)$school['kode_aktivasi']) > 10) respond(400, 'Kode aktivasi tidak valid');
if (strcasecmp((string)($school['status'] ?? ''), 'Aktif') !== 0) respond(403, 'Sekolah tidak aktif');
// Server ini hanya boleh menerima baris yang memang ditujukan kepadanya.
$expectedNpsn = getenv('SSE_SCHOOL_NPSN');
if (!is_string($expectedNpsn) || $expectedNpsn === '' || !hash_equals($expectedNpsn, (string)$school['npsn'])) respond(403, 'Sekolah tujuan tidak cocok');
$values = [];
foreach ($fields as $field) {
    $value = $school[$field] ?? null;
    if ($value !== null && !is_scalar($value)) respond(400, 'Format kolom tidak valid');
    $values[] = $value === null ? null : (string)$value;
}
// Gunakan koneksi MySQLi yang sudah digunakan oleh API sekolah.
require __DIR__ . '/database.php';
if (!isset($conn) || !($conn instanceof mysqli)) respond(500, 'Koneksi database tidak tersedia');
try {
    $names = implode(',', array_map(static fn($s) => '`' . $s . '`', $fields));
    $escaped = [];
    foreach ($values as $v) $escaped[] = $v === null ? 'NULL' : "'" . mysqli_real_escape_string($conn, $v) . "'";
    $updates = [];
    foreach ($fields as $field) {
        if ($field !== 'npsn') $updates[] = '`' . $field . '`=VALUES(`' . $field . '`)';
    }
    $sql = 'INSERT INTO `registerbase_sekolah` (' . $names . ') VALUES (' . implode(',', $escaped) . ') ON DUPLICATE KEY UPDATE ' . implode(',', $updates);
    mysqli_query($conn, $sql);
    respond(200, 'Data sekolah berhasil disimpan');
} catch (Throwable $e) {
    error_log('SSE sync receiver: ' . $e->getMessage());
    respond(500, 'Gagal menyimpan data sekolah');
}
