import { redirect, notFound } from "next/navigation";
import { Metadata } from "next";

import { getOpportunityByMarketingSlug } from "@/services/participant/campaigns/marketing";
import Survey from "@/components/pages/participant/campaigns/survey/survey";
import { getQuestionnaireByJobId } from "@/services/participant/surveys/survey-actions";
import { INTERNAL_PAGES } from "@/constants/pages-mapping/internal-pages-mapping";
import { getCampaignUserSession } from "@/lib/campaigns-session";

export const metadata: Metadata = {
  title: "Survey | Campaign",
  description:
    "Join industry leaders testing new products and driving strategic decisions. Get paid to share your expertise and gain exclusive early access to innovations.",
};

export default async function SurveyPage({
  params,
  searchParams,
}: {
  params: { slug: string };
  searchParams: Record<string, string>;
}) {
  const { slug } = params;
  const {
    expired,
    notFound: notFoundParam,
    utm_source,
    utm_medium,
    utm_content,
  } = searchParams;
  const isExpiredOrNotFound = expired === "true" || notFoundParam === "true";
  const { userId } = (await getCampaignUserSession()) || {};

  if (isExpiredOrNotFound) {
    const query = new URLSearchParams(searchParams).toString();
    const target = `${
      INTERNAL_PAGES.participant.campaign
    }/${slug}/thanks-for-joining${query ? `?${query}` : ""}`;

    redirect(target);
  }

  if (!userId) {
    const query = new URLSearchParams(searchParams).toString();
    const target = `${INTERNAL_PAGES.participant.campaign}/${slug}${
      query ? `?${query}` : ""
    }`;

    redirect(target);
  }

  const opportunityDetails = await getOpportunityByMarketingSlug(slug);

  // Redirect if opportunity is not found.
  if (!opportunityDetails) {
    notFound();
  }

  const { jobId } = opportunityDetails;
  const questionnaireDetails = await getQuestionnaireByJobId(jobId);
  const storageKey = `job-survey-${jobId}`;

  const utmParams = {
    utm_source,
    utm_medium,
    utm_content,
  };

  return (
    <Survey
      jobSurvey={questionnaireDetails}
      storageKey={storageKey}
      utmParams={utmParams}
    />
  );
}
