import dayjs from "dayjs"; import { usePageInfo } from "@/hooks/use-page-info"; import { useApp } from "@/hooks/useApp"; import type { IFlightSearchRequest, SearchPassenger, } from "@/services/eva-display/flight/flight-search/flight-search-services.types"; import { useLocalizationStore } from "@/store/localization-store/use-localization-store"; export interface IFlightSearch { searchLegs: [ { originId: number; originName: string; originType: number; departureId: number; departureName: string; departureType: number; departureTime: Date; cabinClass: number | undefined; cabinClassTitle?: string | undefined; returnTime?: Date; }, ]; passenger: string; flightTripKind: string; } export const useFlightSearch = () => { const DATE_FORMAT = "YYYY-MM-DD"; const { setQueryParams, info } = usePageInfo(); const { isB2C } = useApp(); const { localizationState } = useLocalizationStore(); function dateToString(date: Date): string { return dayjs(date).format(DATE_FORMAT); } function dateFromString(date: string): Date { return dayjs(date, DATE_FORMAT).toDate(); } function setVariables(payload: IFlightSearch): void { setQueryParams( { originId: payload.searchLegs[0].originId.toString(), originType: payload.searchLegs[0].originType.toString(), originName: payload.searchLegs[0].originName.toString(), departureId: payload.searchLegs[0].departureId.toString(), departureName: payload.searchLegs[0].departureName.toString(), departureType: payload.searchLegs[0].departureType.toString(), departureTime: dateToString(payload.searchLegs[0].departureTime), cabinClass: payload.searchLegs[0].cabinClass?.toString() ?? "", cabinClassTitle: payload.searchLegs[0].cabinClassTitle ?? "", flightTripKind: payload.flightTripKind, passenger: payload.passenger.toString(), returnTime: dateToString( payload.searchLegs[0].returnTime ? payload.searchLegs[0].returnTime : payload.searchLegs[0].departureTime, ), lng: localizationState.data.language, rgn: localizationState.data.region, cur: localizationState.data.currency, }, "flight-list", "_self", ); } function getVariables(): IFlightSearch | null { if (!info || !info?.queryParams) return null; if (info) { return { searchLegs: [ { originId: Number(info!.queryParams.originId), originName: info!.queryParams.originName!.toString(), originType: Number(info!.queryParams.originType), departureId: Number(info!.queryParams.departureId), departureName: info!.queryParams.departureName!.toString(), departureType: Number(info!.queryParams.departureType), departureTime: dateFromString(info!.queryParams.departureTime!), cabinClass: Number(info!.queryParams.cabinClass), returnTime: dateFromString( info.queryParams?.returnTime ? info.queryParams.returnTime : info!.queryParams.departureTime!, ), }, ], passenger: info!.queryParams.passenger!.toString(), flightTripKind: info!.queryParams.flightTripKind!.toString(), }; } return null; } function getSearchLegs(values: IFlightSearch) { if (values.flightTripKind === "2") { return [ { originId: Number(values.searchLegs[0].originId), originType: Number(values.searchLegs[0].originType), destinationId: Number(values.searchLegs[0].departureId), destinationType: Number(values.searchLegs[0].departureType), departureTime: dateToString(values!.searchLegs[0]!.departureTime!), cabinClass: Number(values.searchLegs[0].cabinClass), }, { originId: Number(values!.searchLegs[0].departureId), originType: Number(values!.searchLegs[0].departureType), destinationId: Number(values!.searchLegs[0].originId), destinationType: Number(values!.searchLegs[0].originType), departureTime: dateToString(values!.searchLegs[0]!.returnTime!), cabinClass: Number(values!.searchLegs[0].cabinClass), }, ]; } return [ { originId: Number(values!.searchLegs[0].originId), originType: Number(values!.searchLegs[0].originType), destinationId: Number(values!.searchLegs[0].departureId), destinationType: Number(values!.searchLegs[0].departureType), departureTime: dateToString(values!.searchLegs[0].departureTime!), cabinClass: Number(values!.searchLegs[0].cabinClass), }, ]; } function getSearchPassengers(values: IFlightSearch) { const temp: SearchPassenger[] = []; if (isB2C) { const guest = Number(values.passenger.split(",")[0]); const child = Number(values.passenger.split(",")[1]); if (guest > 0) { Array.from({ length: guest }).forEach(() => { temp.push({ passengerType: 0, age: 22, }); }); } if (child > 0) { Array.from({ length: child }).forEach(() => { temp.push({ passengerType: 1, age: 10, }); }); } } else { const employee = Number(values.passenger.split(",")[0]); const guest = Number(values.passenger.split(",")[1]); const child = Number(values.passenger.split(",")[2]); if (employee > 0) { Array.from({ length: employee }).forEach(() => { temp.push({ passengerType: 0, age: 22, }); }); } if (guest > 0) { Array.from({ length: guest }).forEach(() => { temp.push({ passengerType: 0, age: 22, }); }); } if (child > 0) { Array.from({ length: child }).forEach(() => { temp.push({ passengerType: 1, age: 10, }); }); } } return temp; } function getFlightSeacrhParameters(): IFlightSearchRequest | null { if (!info?.path.includes("/flight-list")) { return null; } const variables = getVariables(); if (!variables) return null; return { searchId: null, FlightDisplayType: Number(variables.flightTripKind) === 2 ? 1 : 0, FlightTripKind: Number(variables.flightTripKind), searchLegs: getSearchLegs(variables), searchPassengers: getSearchPassengers(variables), Filter: { PriceMin: 0, PriceMax: 0, AirlineCodes: null, Layover: null, GoingFlightDestinations: null, ReturnFlightDestinations: null, GoingDepartureMinTime: "00:00:00", GoingDepartureMaxTime: "24:00:00", FlightMaxTime: "05:00:00", FlightMinTime: "00:00:00", PageSize: 10, IsPaging: true, ResetPage: false, IsDirect: null, GroupId: 0, Order: 1, }, }; } return { isReady: !!info, setVariables, getVariables, getFlightSeacrhParameters, }; };