import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { seriesCard, SERIES_DETAIL_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 series = await db.series.findUnique({
    where: { slug },
    include: SERIES_DETAIL_INCLUDE,
  });
  if (!series || series.status !== "published") {
    return NextResponse.json({ error: "not found" }, { status: 404 });
  }

  db.series.update({ where: { id: series.id }, data: { views: { increment: 1 } } }).catch(() => {});

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

  return NextResponse.json({
    ...seriesCard(series),
    originalTitle: series.originalTitle,
    description: series.description,
    trailer: series.trailer,
    endYear: series.endYear,
    language: series.language,
    cast: series.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: series.directors.map((d: any) => ({
      id: d.director.id,
      name: d.director.name,
      persianName: d.director.persianName,
      slug: d.director.slug,
    })),
    seasons: series.seasons.map((s: any) => ({
      id: s.id,
      number: s.number,
      title: s.title,
      year: s.year,
      episodes: s.episodes.map((e: any) => ({
        id: e.id,
        number: e.number,
        title: e.title,
        description: e.description,
        duration: e.duration,
        thumbnail: e.thumbnail,
        videoUrl: e.videoUrl,
        views: e.views,
      })),
    })),
    similar: similar.map(seriesCard),
  });
}
