import type { APIRoute } from "astro";

const POCKETBASE_URL = import.meta.env.POCKETBASE_URL || "http://localhost:8090";

export const GET: APIRoute = async ({ cookies }) => {
  try {
    // Получаем токен авторизации из кук
    const pbAuthCookie = cookies.get("pb_auth")?.value;

    if (!pbAuthCookie) {
      return new Response(
        JSON.stringify({ hasReview: false, error: "Требуется авторизация" }),
        {
          status: 401,
          headers: { "Content-Type": "application/json" },
        }
      );
    }

    const token = pbAuthCookie.trim();

    // Проверяем токен и получаем данные пользователя
    const authResponse = await fetch(
      `${POCKETBASE_URL}/api/collections/users/auth-refresh`,
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }
    );

    if (!authResponse.ok) {
      return new Response(
        JSON.stringify({ hasReview: false, error: "Недействительная сессия" }),
        {
          status: 401,
          headers: { "Content-Type": "application/json" },
        }
      );
    }

    const authData = await authResponse.json();
    const userId = authData.record?.id;

    if (!userId) {
      return new Response(
        JSON.stringify({ hasReview: false, error: "Пользователь не найден" }),
        {
          status: 404,
          headers: { "Content-Type": "application/json" },
        }
      );
    }

    // Проверяем, есть ли у пользователя уже созданный отзыв
    const reviewsResponse = await fetch(
      `${POCKETBASE_URL}/api/collections/reviews/records?filter=user%3D%22${userId}%22`,
      {
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${token}`,
        },
      }
    );

    if (!reviewsResponse.ok) {
      return new Response(
        JSON.stringify({ hasReview: false, error: "Ошибка проверки отзывов" }),
        {
          status: 500,
          headers: { "Content-Type": "application/json" },
        }
      );
    }

    const reviewsData = await reviewsResponse.json();
    const hasReview = reviewsData.items && reviewsData.items.length > 0;

    return new Response(
      JSON.stringify({ 
        hasReview,
        reviewCount: reviewsData.items?.length || 0
      }),
      {
        status: 200,
        headers: { "Content-Type": "application/json" },
      }
    );
  } catch (error) {
    console.error("[Reviews Check API] Ошибка:", error);
    return new Response(
      JSON.stringify({ hasReview: false, error: "Ошибка сервера" }),
      {
        status: 500,
        headers: { "Content-Type": "application/json" },
      }
    );
  }
};
