import { redirect } from "next/navigation";

import ThanksForApplying from "@/components/pages/participant/opportunities/thanks-for-applying";
import {
  getOpportunitiesNotLoggedIn,
  getOpportunityById,
} from "@/services/opportunities";
import { retrieveUserSession } from "@/lib/user-session";
import { INTERNAL_PAGES } from "@/constants/pages-mapping/internal-pages-mapping";

type Params = Promise<{ id: number }>;

export async function generateMetadata({ params }: { params: Params }) {
  const { id } = await params;

  return {
    title: `Thank you for applying! | Job ID: ${id}`,
  };
}

export default async function ThanksForApplyingPage({
  params,
  searchParams,
}: {
  params: Params;
  searchParams: Record<string, string>;
}) {
  const { id: jobId } = await params;
  const { full_journey } = searchParams;
  const isCampaign = full_journey === "true";
  const { userId, firstName } = (await retrieveUserSession()) || {};

  // Redirect if user is not logged in. In case of campaign applications, the user might not be logged in and we still want to show the thanks for applying page.
  if (!userId && !isCampaign) {
    redirect(`${INTERNAL_PAGES.participant.opportunities.main}/${jobId}`);
  }

  const sort: { colId: string; sort: "desc" | "asc" } = {
    colId: "publishDate",
    sort: "desc",
  };
  const filterModel = {};
  const itemsPerPage = 5;
  const maxPage = 3;
  const randomPage = Math.floor(Math.random() * maxPage) + 1;

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

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

  const opportunityDetails = await getOpportunityById(jobId);
  const { title, thumbnail, altTextThumbnail } = opportunityDetails || {};
  const storageKey = `job-survey-${jobId}`;

  return (
    <ThanksForApplying
      altTextThumbnail={altTextThumbnail || ""}
      isCampaign={isCampaign}
      jobId={Number(jobId)}
      jobTitle={title || ""}
      recommendedOpportunities={opportunityList}
      storageKey={storageKey}
      thumbnail={thumbnail || ""}
      userFirstName={firstName}
    />
  );
}
