// src/modules/auth.js

import { getAuthToken, setAuthToken, removeAuthToken } from '../utils/cookies.js';

// Предполагается, что JSONRPC.Auth содержит методы:
// - isAuthenticated()
// - startSessionByToken(token)
// - startSessionByPassword(password)
// - createToken()
// - logout()
import { JSONRPC } from '@/json-rpc.js';


/**
 * @public
 * Проверяет, активна ли сессия (через API) или сохранен ли токен в cookies.
 *
 * 🔥 ПЕРЕИМЕНОВАНА для соответствия импорту в app.js!
 * @returns {Promise<boolean>}
 */
export async function checkAuthStatus() {
    try {
        // 1. Проверяем активную сессию (самый надежный способ)
        const isAuthenticated = await JSONRPC.Auth.isAuthenticated();
        if (isAuthenticated) {
            return true;
        }

        // 2. Сессии нет, ищем токен в Cookie
        const token = getAuthToken();
        if (token) {
            console.log("Токен найден, пытаемся стартовать сессию...");
            // 3. Пытаемся стартовать сессию по токену
            const success = await JSONRPC.Auth.startSessionByToken(token);
            if (success) {
                console.log("Сессия успешно восстановлена по токену.");
                return true;
            } else {
                // Токен недействителен или просрочен
                console.warn("Токен недействителен, удаляем его.");
                removeAuthToken();
                return false;
            }
        }

        // 4. Нет ни сессии, ни токена
        return false;

    } catch (err) {
        console.error('Ошибка при стартовой проверке аутентификации:', err);
        // В случае ошибки сети/бэкенда, предполагаем, что не авторизованы
        return false;
    }
}

/**
 * @public
 * Обрабатывает вход по паролю.
 * @param {string} password - Пароль пользователя.
 * @param {boolean} rememberMe - Флаг, указывающий, нужно ли сохранить токен.
 * @returns {Promise<boolean>} - true, если вход успешен.
 */
export async function handleLogin(password, rememberMe) {
    // 1. Пытаемся стартовать сессию по паролю
    const success = await JSONRPC.Auth.startSessionByPassword(password);

    if (success) {
        if (rememberMe) {
            // 2. Успех: если "запомнить меня", создаем и сохраняем токен
            const token = await JSONRPC.Auth.createToken();
            setAuthToken(token);
            console.log("Токен создан и сохранен.");
        }
        return true;
    }

    return false;
}


/**
 * @public
 * Обрабатывает выход из системы.
 */
export async function handleLogout() {
    try {
        // 1. Завершаем сессию на стороне сервера
        await JSONRPC.Auth.logout();
    } catch(e) {
        console.warn("Ошибка при завершении сессии на сервере (возможно, уже была неактивна).", e);
    }

    // 2. Удаляем токен из Cookie
    removeAuthToken();
    console.log("Выход выполнен, токен удален.");

    // Обработчик в ui.js сменит состояние приложения
}