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

import { Options } from "@/types/options/options-data-types";
import { CompanyInformationProfileSchema } from "@/types/profile/profile-update-schema";
import CompanyInformation from "@/components/pages/participant/profile/tabs/company-information";
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: "Company information | Profile",
};

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

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

  const participantData = await getProfileData(userToken);
  const { id: userId } = participantData;

  const optionEndpoints = [
    CORE_ENDPOINTS.options.companyType,
    CORE_ENDPOINTS.options.companyTurnover,
    CORE_ENDPOINTS.options.companyTradeActivity,
    CORE_ENDPOINTS.options.companySize,
  ];

  const [companyType, companyTurnover, tradeActivity, companySize] =
    await Promise.all(
      optionEndpoints.map((endpoint) => getOptions(endpoint, userToken))
    );

  const isDecisionMaker = [
    { id: 1, title: "Yes" },
    { id: 2, title: "No" },
  ];

  const isVATRegistered: Options = [
    { id: 1, title: "Yes" },
    { id: 2, title: "No" },
  ];

  const options = {
    companyType,
    companyTurnover,
    tradeActivity,
    companySize,
    isDecisionMaker,
    isVATRegistered,
  };

  const { businessInformation, personalInformation } = participantData;

  const profileData: CompanyInformationProfileSchema = {
    companyName: businessInformation.companyName,
    companyTypeId: businessInformation.companyTypeId,
    isDecisionMaker: businessInformation.isDecisionMaker,
    tradeActivitiesIds: businessInformation.tradeActivitiesIds,
    companySizeId: businessInformation.companySizeId,
    isVATRegistered: businessInformation.isVATRegistered,
    companyTurnoverId: businessInformation.companyTurnoverId,
  };

  // values: mid-level, senior-level, manager, head of dept and company director/CEO
  const seniorityValues = [2, 3, 4, 5, 6];

  const isSenior =
    businessInformation.seniorityLevelIds?.some((seniority: number) =>
      seniorityValues.includes(seniority)
    ) ?? false;
  const userCountryId = personalInformation.countryId;

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