import { redirect } from "next/navigation";

import {
  getOpportunitiesNotLoggedIn,
  getOpportunityById,
} from "@/services/opportunities";
import { retrieveUserSession } from "@/lib/user-session";
import { INTERNAL_PAGES } from "@/constants/pages-mapping/internal-pages-mapping";
import AlreadyApplied from "@/components/pages/participant/opportunities/already-applied";

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

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

  return {
    title: `Looks like you've already applied! | Job ID: ${id}`,
  };
}

export default async function ThanksForApplyingPage({
  params,
}: {
  params: Params;
}) {
  const { id: jobId } = await params;
  const { userId, firstName } = (await retrieveUserSession()) || {};

  // Redirect if user is not logged in.
  if (!userId) {
    redirect(`${INTERNAL_PAGES.participant.opportunities.main}/${jobId}`);
  }

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

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

  const opportunityList = listOfOpps.data || [];
  const opportunityDetails = await getOpportunityById(Number(jobId));
  const { thumbnail, altTextThumbnail } = opportunityDetails || {};

  return (
    <AlreadyApplied
      altTextThumbnail={altTextThumbnail || ""}
      jobId={Number(jobId)}
      recommendedOpportunities={opportunityList}
      thumbnail={thumbnail || ""}
      userFirstName={firstName}
    />
  );
}
