import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { OrderFeedback } from "@/models/OrderFeedback";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { StatCard } from "@/components/admin/StatCard";
import { FeedbackRow } from "@/components/admin/FeedbackRow";

export const dynamic = "force-dynamic";

export default async function AdminFeedbackPage() {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Ffeedback");
  if (!(await hasPermission("orders_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  await connectDB();
  const all = await OrderFeedback.find({ submitted: true }).sort({ submittedAt: -1 }).lean();
  const sentCount = await OrderFeedback.countDocuments({});

  const avgRating = all.length > 0 ? all.reduce((sum, f) => sum + f.rating, 0) / all.length : 0;
  const pendingConversions = all.filter((f) => f.allowTestimonial && !f.usedForTestimonial).length;

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Feedback"
        subtitle="Zufriedenheits-Nachfrage nach Auftragsabschluss — wird automatisch verschickt, sobald ein Auftrag archiviert wird. Freigegebene Rückmeldungen lassen sich direkt als Kundenstimme übernehmen."
      />

      <div className="grid grid-cols-3 gap-3 mb-8">
        <StatCard label="Antworten" value={`${all.length} / ${sentCount}`} />
        <StatCard label="Ø Bewertung" value={all.length > 0 ? avgRating.toFixed(1) : "–"} />
        <StatCard label="Für Kundenstimme freigegeben" value={pendingConversions} accent={pendingConversions > 0 ? "emerald" : undefined} />
      </div>

      {all.length === 0 ? (
        <AdminEmptyState message="Noch kein Feedback eingegangen." />
      ) : (
        <div className="flex flex-col gap-3">
          {all.map((item) => (
            <FeedbackRow
              key={String(item._id)}
              canConvertToTestimonial={permissions.testimonials_create}
              item={{
                id: String(item._id),
                clientName: item.clientName,
                shootingType: item.shootingType,
                rating: item.rating,
                comment: item.comment,
                allowTestimonial: item.allowTestimonial,
                usedForTestimonial: item.usedForTestimonial,
                usedForQuickReview: item.usedForQuickReview,
                submittedAt: item.submittedAt ? item.submittedAt.toISOString() : null,
                orderId: String(item.orderId),
              }}
            />
          ))}
        </div>
      )}
    </main>
  );
}
