import PocketBase from 'pocketbase';

export type AuthClient = PocketBase;

export const authService = {
    createClient(): AuthClient {
        return new PocketBase(process.env.POCKETBASE_URL || 'http://127.0.0.1:8090');
    },

    createClientFromRequest(request: Request): AuthClient {
        const pb = this.createClient();

        // Загружаем данные аутентификации из куки запроса
        pb.authStore.loadFromCookie(request.headers.get('cookie') || '');

        return pb;
    },

    // Проверяет, действительна ли текущая сессия
    async isAuthenticated(pb: AuthClient): Promise<boolean> {
        if (!pb.authStore.isValid) return false;

        try {
            // Проверяем, действителен ли токен
            await pb.collection('users').authRefresh();
            return true;
        } catch (error) {
            console.error('Auth validation error:', error);
            pb.authStore.clear();
            return false;
        }
    },

    // Валидация и обновление сессии
    async validateAndRefreshSession(pb: AuthClient): Promise<any> {
        if (!pb.authStore.isValid) return null;

        try {
            // Пробуем обновить сессию
            const authData = await pb.collection('users').authRefresh();
            return authData.record; // Возвращаем только пользовательскую запись, а не весь объект ответа
        } catch (error) {
            console.error('Session refresh error:', error);
            pb.authStore.clear();
            return null;
        }
    },

    // Создание заголовков авторизации
    createAuthHeaders(pb: AuthClient): Record<string, string> {
        if (!pb.authStore.isValid) {
            return {};
        }

        return {
            'Authorization': `Bearer ${pb.authStore.token}`,
        };
    }
};