import { NextRequest, NextResponse } from "next/server";
import { createClient } from "@/lib/supabase/server";
import { logger } from "@/lib/logger";

export async function GET(request: NextRequest) {
  try {
    const supabase = await createClient();
    
    const { data: { user } } = await supabase.auth.getUser();
    
    if (!user) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    const { searchParams } = new URL(request.url);
    const userId = searchParams.get("userId");
    
    if (!userId) {
      return NextResponse.json({ error: "userId is required" }, { status: 400 });
    }

    // Fetch ratings with profile information
    const { data: ratings, error } = await supabase
      .from("ratings")
      .select(`
        *,
        from_profile:profiles!ratings_from_id_fkey(
          id,
          name,
          avatar_url
        )
      `)
      .eq("to_id", userId)
      .order("created_at", { ascending: false });

    if (error) {
      logger.error("[ratings-api] Error fetching ratings:", error);
      return NextResponse.json({ error: "Failed to fetch ratings" }, { status: 500 });
    }

    // Calculate average rating
    const averageRating = ratings?.length 
      ? ratings.reduce((sum, r) => sum + r.score, 0) / ratings.length 
      : 0;

    return NextResponse.json({
      ratings: ratings || [],
      averageRating,
      totalRatings: ratings?.length || 0
    });
  } catch (error) {
    logger.error("[ratings-api] Unexpected error in ratings API:", error);
    return NextResponse.json(
      { error: "Internal server error" }, 
      { status: 500 }
    );
  }
}