import type { APIRoute } from 'astro';
import { authService } from '@/lib/authService';
import { oauthStoreService } from '@/lib/oauthStore';

export const GET: APIRoute = async ({ url, request, redirect }) => {
    try {
        // ... (ваш код для получения code, state, verifier) ...
        const code = url.searchParams.get('code');
        const state = url.searchParams.get('state');
        const error = url.searchParams.get('error');

        if (error || !code || !state) {
            return redirect('/auth/login?error=GoogleFailed');
        }

        const storedData = oauthStoreService.get(state);
        if (!storedData) {
            return redirect('/auth/login?error=NoVerifier');
        }
        const storedVerifier = storedData.verifier;
        const callbackUrl = storedData.callbackUrl || '/bewertungen'; // по умолчанию - страница отзывов

        const pb = authService.createClientFromRequest(request);
        const redirectUrl = 'http://localhost:3000/api/auth/google/callback';

        // Аутентификация в PocketBase
        const authData = await pb.collection('users').authWithOAuth2Code(
            'google',
            code,
            storedVerifier,
            redirectUrl,
            // Можно передать дополнительные данные для создания/обновления пользователя
            // {
            //     name: 'John Doe'
            // }
        );

        console.log('OAuth completed successfully for user:', authData.record?.id);
        oauthStoreService.delete(state);

        // --- КЛЮЧЕВОЙ МОМЕНТ ---

        // 1. Создаем ответ-редирект
        const response = redirect(callbackUrl.includes('?')
            ? `${callbackUrl}&loginSuccess=true`
            : `${callbackUrl}?loginSuccess=true`); // Перенаправляем пользователя на страницу, с которой он пришел

        // 2. Экспортируем валидную куку из authStore, который только что был заполнен
        const authCookie = pb.authStore.exportToCookie({
            httpOnly: true, // ВАЖНО: Защита от XSS
            secure: import.meta.env.PROD, // В production должно быть true
            sameSite: 'lax', // Защита от CSRF
            path: '/', // Доступно на всем сайте
        });

        // 3. Устанавливаем куку в заголовок ответа
        response.headers.append('Set-Cookie', authCookie);

        return response;

    } catch (err) {
        console.error('PB Auth Error:', err);
        // Важно обрабатывать ошибки и перенаправлять пользователя
        return redirect(`/auth/login?error=${encodeURIComponent('Authentication failed')}`);
    }
};