import {
   AirlineBookingPackageOption,
   AirportBookingPackageOption,
   BookingAirlineGroup,
   BookingAirportGroup,
   BookingOptionGroup,
   PerBookingPackageOption,
} from "@qite/tide-client/build/types";
import OptionBookingGroup from "./option-booking-group";
import React from "react";

interface OptionBookingAirlineGroupProps {
   airGroup: BookingAirlineGroup<AirlineBookingPackageOption>;
   onGroupChange?: (
      group:
         | BookingAirlineGroup<AirlineBookingPackageOption>
         | BookingAirportGroup<AirportBookingPackageOption>
   ) => void;
}

const OptionBookingAirlineGroup: React.FC<OptionBookingAirlineGroupProps> = ({
   airGroup,
   onGroupChange,
}) => {
   const handleOnGroupChange = (
      group: BookingOptionGroup<PerBookingPackageOption>
   ) => {
      const updatedGroups = airGroup.groups?.map((g) =>
         g.name === group.name ? group : g
      );

      const updatedAirlineGroup = Object.assign({}, airGroup, {
         groups: updatedGroups,
      });
      if (onGroupChange) onGroupChange(updatedAirlineGroup);
   };

   const groups = airGroup.groups.map(
      (group) =>
         ({
            name: group.name,
            title: group.title,
            options: group.options,
         } as BookingOptionGroup<PerBookingPackageOption>)
   );

   return (
      <div className="booking-card__airline-group-body">
         <h4 className="booking-card__airline-group-heading">
            {airGroup.label}
         </h4>
         {groups.map((group, i) => (
            <OptionBookingGroup
               key={`${airGroup.label}_${group.name}_${i}`}
               group={group}
               firstClassName={"booking-card__group-body"}
               secondClassName={"booking-card__group-heading"}
               parentId={`booking_${airGroup.label}_${group.name}`}
               onGroupChange={handleOnGroupChange}
            />
         ))}
      </div>
   );
};

export default OptionBookingAirlineGroup;
