import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { movieCard, MOVIE_DETAIL_INCLUDE, MOVIE_INCLUDE } from "@/lib/content";

export const dynamic = "force-dynamic";

export async function GET(req: NextRequest, { params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params;
  const movie = await db.movie.findUnique({
    where: { slug },
    include: MOVIE_DETAIL_INCLUDE,
  });
  if (!movie || movie.status !== "published") {
    return NextResponse.json({ error: "not found" }, { status: 404 });
  }

  // increment views (fire and forget)
  db.movie.update({ where: { id: movie.id }, data: { views: { increment: 1 } } }).catch(() => {});

  const genreIds = movie.genres.map((g) => g.id);
  const similar = await db.movie.findMany({
    where: { id: { not: movie.id }, status: "published", genres: { some: { id: { in: genreIds } } } },
    include: MOVIE_INCLUDE,
    take: 12,
  });

  return NextResponse.json({
    ...movieCard(movie),
    originalTitle: movie.originalTitle,
    description: movie.description,
    trailer: movie.trailer,
    tmdbId: movie.tmdbId,
    language: movie.language,
    createdAt: movie.createdAt,
    cast: movie.cast.map((c: any) => ({
      id: c.actor.id,
      name: c.actor.name,
      persianName: c.actor.persianName,
      slug: c.actor.slug,
      role: c.role,
      photo: c.actor.photo,
      gradient: c.actor.photo ? ["#000", "#000"] : ["#7C3AED", "#EC4899"],
    })),
    directors: movie.directors.map((d: any) => ({
      id: d.director.id,
      name: d.director.name,
      persianName: d.director.persianName,
      slug: d.director.slug,
    })),
    sources: movie.sources.map((s: any) => ({
      id: s.id,
      quality: s.quality,
      url: s.url,
      isHls: s.isHls,
    })),
    similar: similar.map(movieCard),
  });
}
