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

import CampaignThanksForApplying from "@/components/pages/participant/campaigns/thanks-for-applying";
import { CORE_ENDPOINTS } from "@/constants/api-mappings/external-api-mapping";
import { INTERNAL_PAGES } from "@/constants/pages-mapping/internal-pages-mapping";
import { getOptions } from "@/services/general-actions";
import { getOpportunitiesNotLoggedIn } from "@/services/opportunities";
import { getCampaignUserSession } from "@/lib/campaigns-session";
import { PROFESSIONAL_JOB_TOPIC_IDS } from "@/constants/professional-job-topics";

export const metadata: Metadata = {
  title: "Thanks for joining | 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 ThanksForApplyingPage({
  params,
  searchParams,
}: {
  params: { slug: string };
  searchParams: Record<string, string>;
}) {
  const { slug } = params;
  const { expired, notFound, jobIfRef } = searchParams;
  const { userId } = (await getCampaignUserSession()) || {};

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

    redirect(target);
  }

  const currencyOptions = await getOptions(
    CORE_ENDPOINTS.options.currency,
  );

  const sort: { colId: string; sort: "desc" | "asc" } = {
    colId: "publishDate",
    sort: "desc",
  };

  const filterModel = {
    researchTopic: PROFESSIONAL_JOB_TOPIC_IDS,
  };

  const itemsPerPage = 5;
  const currentPage = 1;

  const listOfOpportunities = await getOpportunitiesNotLoggedIn(
    itemsPerPage,
    currentPage,
    sort,
    filterModel,
  );

  const opportunityList = (listOfOpportunities.data || [])
    .filter((opp) => opp.jobId !== Number(jobIfRef))
    .slice(0, 4);

  const isExpiredOrNotFound = expired === "true" || notFound === "true";

  return (
    <CampaignThanksForApplying
      currencyOptions={currencyOptions}
      isExpiredOrNotFound={isExpiredOrNotFound}
      listOfOpps={opportunityList}
    />
  );
}
