import { redirect } from "next/navigation";
import Link from "next/link";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { Testimonial } from "@/models/Testimonial";
import { QuickReview } from "@/models/QuickReview";
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 { NewTestimonialForm } from "@/components/admin/NewTestimonialForm";
import { TestimonialRow } from "@/components/admin/TestimonialRow";
import { NewQuickReviewForm } from "@/components/admin/NewQuickReviewForm";
import { QuickReviewRow } from "@/components/admin/QuickReviewRow";

export const dynamic = "force-dynamic";

export default async function AdminTestimonialsPage({
  searchParams,
}: {
  searchParams: Promise<{ tab?: string }>;
}) {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");
  if (!(await hasPermission("testimonials_view"))) redirect("/de/account");

  const { tab } = await searchParams;
  const activeTab: "manual" | "google" | "quick" = tab === "google" ? "google" : tab === "quick" ? "quick" : "manual";

  const permissions = await getAllPermissions();
  await connectDB();
  const [allItems, quickItems] = await Promise.all([
    Testimonial.find({}).sort({ sortOrder: 1 }).lean(),
    QuickReview.find({}).sort({ sortOrder: 1 }).lean(),
  ]);
  const manualItems = allItems.filter((i) => i.source !== "google");
  const googleItems = allItems.filter((i) => i.source === "google");

  const avgGoogleRating =
    googleItems.length > 0 ? googleItems.reduce((sum, i) => sum + i.rating, 0) / googleItems.length : 0;

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Bewertungen"
        subtitle="Kurze Kundenstimmen für die Startseite — admin-kuratiert, kein offenes öffentliches Bewertungsformular. Reihenfolge per Pfeil-Buttons. Echte Google-Bewertungen lassen sich als zweite Quelle manuell übernehmen (kein Live-API-Zugriff auf Google eingerichtet). Kurzbewertungen (nur Name + Sterne) laufen als eigenes, kompaktes Fließband direkt unter dem Hero-Banner."
      />

      <div className="grid grid-cols-4 gap-3 mb-8">
        <StatCard label="Kundenstimmen" value={manualItems.length} />
        <StatCard label="Google-Bewertungen" value={googleItems.length > 0 ? `${googleItems.length} · Ø ${avgGoogleRating.toFixed(1)}★` : "0"} />
        <StatCard label="Kurzbewertungen" value={quickItems.length} />
        <StatCard label="Gesamt sichtbar" value={allItems.filter((i) => i.visible).length + quickItems.filter((i) => i.visible).length} />
      </div>

      <div className="flex gap-1.5 mb-6">
        <Link
          href="/de/admin/testimonials?tab=manual"
          className={`text-xs uppercase tracking-[0.13em] rounded-full px-3.5 py-1.5 transition-colors ${
            activeTab === "manual" ? "bg-white/10 text-[var(--rk-ink)]" : "text-[var(--rk-ink-muted)] hover:text-[var(--rk-ink)]"
          }`}
        >
          Kundenstimmen ({manualItems.length})
        </Link>
        <Link
          href="/de/admin/testimonials?tab=google"
          className={`text-xs uppercase tracking-[0.13em] rounded-full px-3.5 py-1.5 transition-colors ${
            activeTab === "google" ? "bg-white/10 text-[var(--rk-ink)]" : "text-[var(--rk-ink-muted)] hover:text-[var(--rk-ink)]"
          }`}
        >
          Google-Bewertungen ({googleItems.length})
        </Link>
        <Link
          href="/de/admin/testimonials?tab=quick"
          className={`text-xs uppercase tracking-[0.13em] rounded-full px-3.5 py-1.5 transition-colors ${
            activeTab === "quick" ? "bg-white/10 text-[var(--rk-ink)]" : "text-[var(--rk-ink-muted)] hover:text-[var(--rk-ink)]"
          }`}
        >
          Kurzbewertungen ({quickItems.length})
        </Link>
      </div>

      {activeTab === "quick" ? (
        <>
          <NewQuickReviewForm />
          <div className="flex flex-col gap-3">
            {quickItems.map((item) => (
              <QuickReviewRow
                key={String(item._id)}
                item={{ id: String(item._id), authorName: item.authorName, rating: item.rating, visible: item.visible }}
              />
            ))}
            {quickItems.length === 0 && <AdminEmptyState message="Noch keine Kurzbewertungen angelegt." />}
          </div>
        </>
      ) : (
        <>
          <NewTestimonialForm defaultSource={activeTab} />
          <div className="flex flex-col gap-3">
            {(activeTab === "google" ? googleItems : manualItems).map((item) => (
              <TestimonialRow
                key={String(item._id)}
                item={{
                  id: String(item._id),
                  authorName: item.authorName,
                  realName: item.realName,
                  quote: item.quote,
                  quoteEn: item.quoteEn,
                  context: item.context,
                  contextEn: item.contextEn,
                  imagePath: item.imagePath,
                  source: item.source,
                  rating: item.rating,
                  reviewUrl: item.reviewUrl,
                  visible: item.visible,
                }}
              />
            ))}
            {(activeTab === "google" ? googleItems : manualItems).length === 0 && (
              <AdminEmptyState
                message={activeTab === "google" ? "Noch keine Google-Bewertungen übernommen." : "Noch keine Kundenstimmen angelegt."}
              />
            )}
          </div>
        </>
      )}
    </main>
  );
}
