import { NextRequest, NextResponse } from "next/server";
import { db, mealPlans, eq, and } from "@epicure/db";
import { requireSession } from "@/lib/api-auth";

type Params = { params: Promise<{ weekStart: string }> };

export async function GET(_req: NextRequest, { params }: Params) {
  const { session, response } = await requireSession();
  if (response) return response;
  const { weekStart } = await params;

  const plan = await db.query.mealPlans.findFirst({
    where: and(eq(mealPlans.userId, session!.user.id), eq(mealPlans.weekStart, weekStart)),
    with: {
      entries: {
        with: {
          recipe: {
            with: { photos: true },
          },
        },
      },
    },
  });

  if (!plan) return NextResponse.json({ weekStart, entries: [] });
  return NextResponse.json(plan);
}

export async function POST(_req: NextRequest, { params }: Params) {
  const { session, response } = await requireSession();
  if (response) return response;
  const { weekStart } = await params;

  const existing = await db.query.mealPlans.findFirst({
    where: and(eq(mealPlans.userId, session!.user.id), eq(mealPlans.weekStart, weekStart)),
  });

  if (existing) return NextResponse.json(existing);

  const id = crypto.randomUUID();
  await db.insert(mealPlans).values({ id, userId: session!.user.id, weekStart });
  return NextResponse.json({ id, weekStart }, { status: 201 });
}
