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

import FinancialEmployment from "@/components/pages/participant/profile/tabs/financial-employment";
import { FinancialEmploymentProfileSchema } from "@/types/profile/profile-update-schema";
import { CORE_ENDPOINTS } from "@/constants/api-mappings/external-api-mapping";
import { getProfileData, getOptions } from "@/services/general-actions";
import { retrieveUserToken } from "@/lib/user-session";
import { INTERNAL_PAGES } from "@/constants/pages-mapping/internal-pages-mapping";

export const metadata: Metadata = {
  title: "Financial & employment | Profile",
};

export default async function FinancialEmploymentPage() {
  const userToken = await retrieveUserToken();

  if (!userToken) {
    redirect(INTERNAL_PAGES.participant.login);
  }

  const participantData = await getProfileData(userToken);

  const optionEndpoints = [
    CORE_ENDPOINTS.options.financialProducts,
    CORE_ENDPOINTS.options.seniority,
    CORE_ENDPOINTS.options.benefits,
    CORE_ENDPOINTS.options.industry,
    CORE_ENDPOINTS.options.employment,
    CORE_ENDPOINTS.options.incomeBracket,
  ];

  const [
    financialProducts,
    seniorityLevelIds,
    benefits,
    industry,
    employmentStatusIds,
    individualIncome,
  ] = await Promise.all(
    optionEndpoints.map((endpoint) => getOptions(endpoint, userToken))
  );

  const { id: userId } = participantData;
  const { personalInformation, businessInformation } = participantData;

  const profileData: FinancialEmploymentProfileSchema = {
    financialProductsIds: businessInformation.financialProductsIds,
    seniorityLevelIds: businessInformation.seniorityLevelIds,
    benefitsIds: personalInformation.benefitsIds,
    industryId: businessInformation.industryId,
    employmentStatusIds: businessInformation.employmentStatusIds,
    individualIncomeId: businessInformation.incomeBracketId,
    occupation: businessInformation.occupation,
  };

  const options = {
    financialProducts,
    seniorityLevelIds,
    benefits,
    industry,
    employmentStatusIds,
    individualIncome,
  };

  const userCountryId = personalInformation.countryId;

  return (
    <FinancialEmployment
      options={options}
      profileData={profileData}
      userCountryId={userCountryId}
      userId={userId}
    />
  );
}
