import type { APIRoute } from "astro";

const POCKETBASE_URL = "http://localhost:8090";

function log(message: string, data?: unknown) {
  const timestamp = new Date().toISOString();
  console.log(
    `[AUTH ME][${timestamp}] ${message}`,
    data ? JSON.stringify(data, null, 2) : "",
  );
}

export const GET: APIRoute = async ({ cookies, request }) => {
  const requestId = crypto.randomUUID();
  log(`=== Проверка авторизации #${requestId} ===`);

  try {
    const pbAuthCookie = cookies.get("pb_auth")?.value;
    log(`Получена кука pb_auth: ${pbAuthCookie ? "да" : "нет"}`);
    
    // Полное логирование куки для отладки
    if (pbAuthCookie) {
      log(`Сырое значение куки: "${pbAuthCookie}"`);
      log(`Тип значения: ${typeof pbAuthCookie}`);
    }

    if (!pbAuthCookie) {
      log(`Токен не найден #${requestId}`);
      return new Response(
        JSON.stringify({ authenticated: false, user: null }),
        { status: 200, headers: { "Content-Type": "application/json" } },
      );
    }

    // Astro уже отдает чистое значение, нам нужно только обрезать пробелы
    const token = pbAuthCookie.trim();
    
    // Логирование для отладки (первые 20 символов токена)
    log(`Токен (первые 20 символов): ${token.substring(0, 20)}...`);
    log(`Длина токена: ${token.length}`);

    const response = await fetch(
      `${POCKETBASE_URL}/api/collections/users/auth-refresh`,
      {
        method: "POST",
        headers: {
          Authorization: `Bearer ${token}`,
          "Content-Type": "application/json",
        },
      },
    );

    if (!response.ok) {
      const errorData = await response.json();
      log(
        `Токен невалиден (Статус ${response.status}) #${requestId}:`,
        errorData,
      );

      // ВАЖНО: Если токен протух - удаляем куку встроенным методом Astro
      if (cookies.has("pb_auth")) {
        cookies.delete("pb_auth", { path: "/" });
      }

      return new Response(
        JSON.stringify({ authenticated: false, user: null }),
        { status: 200, headers: { "Content-Type": "application/json" } },
      );
    }

    const data = await response.json();
    log(`Пользователь авторизован: ${data.record?.email}`);

    const isHttps = request.headers.get("x-forwarded-proto") === "https";

    // Обновляем куку свежим токеном (продляем жизнь)
    cookies.set("pb_auth", data.token, {
      path: "/",
      maxAge: 60 * 60 * 24 * 7,
      httpOnly: false,
      secure: isHttps,
      sameSite: "lax",
    });

    return new Response(
      JSON.stringify({
        authenticated: true,
        user: {
          id: data.record.id,
          email: data.record.email,
          name: data.record.name,
          avatar: data.record.avatar,
          verified: data.record.verified,
        },
      }),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  } catch (error) {
    console.error(`[AUTH ME][${requestId}] Исключение:`, error);
    return new Response(
      JSON.stringify({ authenticated: false, error: "Ошибка сервера" }),
      { status: 500, headers: { "Content-Type": "application/json" } },
    );
  }
};
