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;
