<?php
// ==========================================
// DETAY - ADMIN API
// Stores shared site data in data.json.
// ==========================================

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Accept');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: 0');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

$dataFile = __DIR__ . '/data.json';
$allowedTypes = ['links', 'position', 'general'];

$defaultData = [
    'links' => [
        ['id' => 1, 'title' => 'Kick', 'url' => 'https://kick.com/detayhotline', 'icon' => 'custom-kick', 'color' => '#53FC18'],
        ['id' => 2, 'title' => 'Instagram', 'url' => 'https://instagram.com/detayhotline', 'icon' => 'fab fa-instagram', 'color' => '#E4405F'],
        ['id' => 3, 'title' => 'YouTube', 'url' => 'https://youtube.com', 'icon' => 'fab fa-youtube', 'color' => '#FF0000'],
        ['id' => 4, 'title' => 'Spotify', 'url' => 'https://spotify.com', 'icon' => 'fab fa-spotify', 'color' => '#1DB954']
    ],
    'position' => [
        'desktop' => new stdClass(),
        'mobile' => new stdClass()
    ],
    'general' => [
        'subtitle' => 'MÜZİSYEN'
    ],
    'updatedAt' => gmdate('c')
];

function send_json($data, int $statusCode = 200): void {
    http_response_code($statusCode);
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}

function read_data(string $dataFile, array $defaultData): array {
    if (!file_exists($dataFile)) {
        $created = file_put_contents(
            $dataFile,
            json_encode($defaultData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
            LOCK_EX
        );

        if ($created === false) {
            send_json([
                'success' => false,
                'error' => 'data.json oluşturulamadı. Klasör yazılabilir olmalı.'
            ], 500);
        }
    }

    $raw = file_get_contents($dataFile);
    $data = json_decode($raw, true);

    if (!is_array($data)) {
        $data = $defaultData;
    }

    // Merge missing top-level keys without deleting existing user data.
    foreach ($defaultData as $key => $value) {
        if (!array_key_exists($key, $data)) {
            $data[$key] = $value;
        }
    }

    if (!isset($data['position']) || !is_array($data['position'])) {
        $data['position'] = ['desktop' => new stdClass(), 'mobile' => new stdClass()];
    }
    if (!array_key_exists('desktop', $data['position'])) $data['position']['desktop'] = new stdClass();
    if (!array_key_exists('mobile', $data['position'])) $data['position']['mobile'] = new stdClass();

    return $data;
}

function write_data(string $dataFile, array &$data): void {
    $data['updatedAt'] = gmdate('c');

    $written = file_put_contents(
        $dataFile,
        json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
        LOCK_EX
    );

    if ($written === false) {
        send_json([
            'success' => false,
            'error' => 'Dosyaya yazılamadı. data.json veya bulunduğu klasör için yazma izinlerini kontrol edin.'
        ], 500);
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $type = $_GET['type'] ?? 'all';
    $data = read_data($dataFile, $defaultData);

    if ($type === 'all') {
        send_json($data);
    }

    if (in_array($type, $allowedTypes, true)) {
        send_json($data[$type] ?? []);
    }

    send_json([], 404);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $input = file_get_contents('php://input');
    $payload = json_decode($input, true);

    if (!is_array($payload)) {
        send_json(['success' => false, 'error' => 'Geçersiz JSON gönderildi.'], 400);
    }

    $type = $payload['type'] ?? null;

    if (!in_array($type, $allowedTypes, true) || !array_key_exists('data', $payload)) {
        send_json(['success' => false, 'error' => 'Geçersiz veri formatı.'], 400);
    }

    $currentData = read_data($dataFile, $defaultData);
    $currentData[$type] = $payload['data'];
    write_data($dataFile, $currentData);

    send_json(['success' => true, 'updatedAt' => $currentData['updatedAt']]);
}

send_json(['success' => false, 'error' => 'Desteklenmeyen HTTP metodu.'], 405);
