import { setRequestLocale } from "next-intl/server";
import { connectDB } from "@/lib/db";
import { OrderFeedback } from "@/models/OrderFeedback";
import { ScrollReveal } from "@/components/ScrollReveal";
import { FeedbackForm } from "@/components/FeedbackForm";

export const dynamic = "force-dynamic";

export default async function FeedbackPage({ params }: { params: Promise<{ locale: string; token: string }> }) {
  const { locale, token } = await params;
  setRequestLocale(locale);
  const isEn = locale === "en";

  await connectDB();
  const feedback = await OrderFeedback.findOne({ token }).lean();

  return (
    <main className="min-h-screen rk-shell pt-32 pb-24">
      <ScrollReveal className="max-w-xl mx-auto text-center mb-10">
        <p className="text-xs uppercase tracking-[0.35em] text-[var(--rk-ink-muted)]">
          {isEn ? "Feedback" : "Feedback"}
        </p>
        <h1 className="rk-wordmark mt-4 text-2xl sm:text-3xl">{isEn ? "How did it go?" : "Wie war's?"}</h1>
        {!feedback && (
          <p className="mt-4 text-sm leading-relaxed text-[var(--rk-ink-muted)]">
            {isEn ? "This feedback link is invalid or has expired." : "Dieser Feedback-Link ist ungültig oder abgelaufen."}
          </p>
        )}
      </ScrollReveal>

      {feedback && (
        <ScrollReveal delayMs={100} className="max-w-md mx-auto border border-white/10 rounded-2xl p-6 sm:p-8 bg-[var(--rk-surface)]">
          {feedback.submitted ? (
            <p className="text-sm text-emerald-400">
              {isEn ? "Thank you — your feedback has already been recorded." : "Danke — dein Feedback wurde bereits gespeichert."}
            </p>
          ) : (
            <FeedbackForm
              token={token}
              locale={locale}
              labels={{
                ratingLabel: isEn ? "Your rating" : "Deine Bewertung",
                starUnitLabel: isEn ? "stars" : "Sterne",
                commentLabel: isEn ? "A few words about your experience (optional)" : "Ein paar Worte zu deiner Erfahrung (optional)",
                commentRewardHint: isEn
                  ? "Writing a few words earns you a small discount code for your next shoot."
                  : "Für ein paar geschriebene Worte gibt's einen kleinen Rabattcode fürs nächste Shooting dazu.",
                allowTestimonialLabel: isEn
                  ? "You may use my feedback (possibly shortened) as a testimonial on the website."
                  : "Mein Feedback darf (ggf. gekürzt) als Kundenstimme auf der Website verwendet werden.",
                submit: isEn ? "Send feedback" : "Feedback senden",
                success: isEn
                  ? "Thank you so much for your feedback!"
                  : "Vielen Dank für dein Feedback!",
                rewardCodeIntro: isEn ? "Here's your discount code:" : "Hier ist dein Rabattcode:",
              }}
            />
          )}
        </ScrollReveal>
      )}
    </main>
  );
}
