import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { aiChat } from "@/lib/ai";

export const dynamic = "force-dynamic";

export async function POST(req: NextRequest) {
  const body = await req.json().catch(() => ({}));
  const question: string = (body?.question ?? "").trim();
  if (!question) {
    return NextResponse.json({ error: "question required" }, { status: 400 });
  }

  // Gather a concise stats snapshot for the AI
  const [users, movies, series, episodes, tracks, channels, payments, subscriptions, ads] = await Promise.all([
    db.user.count(),
    db.movie.count(),
    db.series.count(),
    db.episode.count(),
    db.musicTrack.count(),
    db.liveChannel.count(),
    db.payment.findMany(),
    db.subscription.findMany({ include: { plan: true, user: true } }),
    db.advertisement.findMany(),
  ]);

  const paid = payments.filter((p) => p.status === "paid");
  const totalRevenue = paid.reduce((s, p) => s + p.amount, 0);
  const today = new Date(); today.setHours(0, 0, 0, 0);
  const monthStart = new Date(today.getFullYear(), today.getMonth(), 1);
  const revenueToday = paid.filter((p) => new Date(p.createdAt) >= today).reduce((s, p) => s + p.amount, 0);
  const revenueMonth = paid.filter((p) => new Date(p.createdAt) >= monthStart).reduce((s, p) => s + p.amount, 0);
  const topMovies = await db.movie.findMany({ orderBy: { views: "desc" }, take: 5, select: { persianTitle: true, title: true, views: true, imdbRating: true } });
  const planCounts = await db.user.groupBy({ by: ["plan"], _count: true });
  const activeSubs = subscriptions.filter((s) => s.status === "active").length;

  const context = `
شما دستیار هوشمند پنل مدیریت PeepBox هستید. فقط بر اساس داده‌های زیر پاسخ بده. اعداد را با ارقام فارسی و مبلغ را به تومان نمایش بده.

آمار لحظه‌ای پلتفرم:
- کاربران کل: ${users}
- فیلم‌ها: ${movies} | سریال‌ها: ${series} | قسمت‌ها: ${episodes}
- آهنگ‌ها: ${tracks} | کانال‌های زنده: ${channels}
- درآمد کل: ${totalRevenue} تومان
- درآمد امروز: ${revenueToday} تومان
- درآمد این ماه: ${revenueMonth} تومان
- اشتراک‌های فعال: ${activeSubs}
- تعداد پرداخت موفق: ${paid.length}
- تبلیغات فعال: ${ads.filter(a => a.isActive).length} از ${ads.length}

پلن‌های کاربران:
${planCounts.map((p) => `- ${p.plan}: ${p._count} کاربر`).join("\n")}

پربازدیدترین فیلم‌ها:
${topMovies.map((m, i) => `${i + 1}. ${m.persianTitle} — ${m.views} بازدید، امتیاز ${m.imdbRating}`).join("\n")}
`;

  try {
    const answer = await aiChat(
      "تو دستیار پنل مدیریت PeepBox هستی. فقط بر اساس داده‌های ارائه‌شده پاسخ بده. مختصر، حرفه‌ای و فارسی پاسخ بده. اگر داده‌ای موجود نیست صادقانه بگو.",
      `${context}\n\nسوال مدیر: ${question}`,
      { temperature: 0.3, maxTokens: 600 },
    );
    return NextResponse.json({ answer });
  } catch (e: any) {
    // Fallback rule-based answer
    const q = question.toLowerCase();
    let answer = "متاسفانه ارتباط با سرویس هوش مصنوعی مقدور نیست. خلاصه‌ی داده‌ها: ";
    if (q.includes("درآمد")) answer += `درآمد کل ${totalRevenue.toLocaleString("en-US")} تومان، امروز ${revenueToday.toLocaleString("en-US")} تومان، این ماه ${revenueMonth.toLocaleString("en-US")} تومان است.`;
    else if (q.includes("کاربر")) answer += `${users} کاربر ثبت‌شده و ${activeSubs} اشتراک فعال داریم.`;
    else if (q.includes("پربازدید") || q.includes("محبوب")) answer += `پربازدیدترین: ${topMovies[0]?.persianTitle ?? "نامشخص"} با ${topMovies[0]?.views ?? 0} بازدید.`;
    else answer += `${users} کاربر، ${movies} فیلم، ${series} سریال، درآمد کل ${totalRevenue.toLocaleString("en-US")} تومان.`;
    return NextResponse.json({ answer, fallback: true });
  }
}
