public List<Segment> GetSegments(string token, List<Person> lstPersons, List<PaxWiseFareIdResult> objPaxWiseFareId, FlightRequest objFlightRequest)
        {
            List<SeatsInfo> objSeatsInfo = new List<SeatsInfo>();
            var segments = new List<Segment>();
            foreach (var item in objPaxWiseFareId)
            {

                List<AlreadyTakenSeat> colAlreadyUsedInThisProcessSpecialService = new List<AlreadyTakenSeat>();
                if (objFlightRequest.Seating)
                {
                    objSeatsInfo = RetrieveSeatsAvailability(token, item.DepartureDate, item.LFID, item.Cabin);
                }
                foreach (var person in lstPersons)
                {

                    List<SpacialServiceAndSeat> colSpecialService = new List<SpacialServiceAndSeat>();
                    SeatCharge seat = new SeatCharge();
                    //Seating
                    //if (!objFlightRequest.Seating)
                    //    return colSpecialService;
                    //else
                    if (objFlightRequest.Seating && person.PTCID != 5)// Not an infant
                    {
                        colSpecialService = GetAvailableSeatForAllLegs(objSeatsInfo, item, person, ref colAlreadyUsedInThisProcessSpecialService);//get seat from all physical flight for the person i.e for OW per person

                    }
                    Segment segment = new Segment();
                    segment.FareInformationID = GetFareId(item, person.PTCID);
                    segment.MarketingCode = "NA";
                    segment.StoreFrontID = "NA";
                    segment.PersonOrgID = person.PersonOrgID;
                    segment.SpecialServices = GetSpecialService(objFlightRequest, item, person).ToArray(); //new List<SpecialService>(), //GetSpecialServices(p, localFlight, currency),

                    List<Seat> seatassigned = new List<Seat>();

                    if (colSpecialService != null && colSpecialService.Count > 0)
                    {
                        seatassigned = new List<Seat>();
                        foreach (var service in colSpecialService)
                        {

                            if (service.Special_Service.CodeType != string.Empty)
                            {
                                var serviceList = segment.SpecialServices == null ? new List<SpecialService>() : segment.SpecialServices.ToList();
                                serviceList.Add(service.Special_Service);
                                segment.SpecialServices = serviceList.ToArray();
                            }

                            seatassigned.Add(new Seat()
                            {
                                DepartureDate = item.DepartureDate.Date,
                                LogicalFlightID = item.LFID,
                                PersonOrgID = person.PersonOrgID,
                                RowNumber = Convert.ToString(service.Seat_Charges.RowNumber),
                                PhysicalFlightID = service.PhysicalFlightID,
                                SeatSelected = service.Seat_Charges.Seat
                            });

                        }

                    }

                    segment.Seats = seatassigned.ToArray();
                    segments.Add(segment);

                }

            }

            return segments;
        }
        private List<SpacialServiceAndSeat> GetAvailableSeatForAllLegs(List<SeatsInfo> objSeatsInfo, PaxWiseFareIdResult item, Person person, ref List<AlreadyTakenSeat> AlreadyTakenSeat)
        {
            AlreadyTakenSeat previousSeat = new CreatePNR_AutomationApp.AlreadyTakenSeat();
            List<SpacialServiceAndSeat> colSpecialService = new List<SpacialServiceAndSeat>();
            foreach (var seatinfo in objSeatsInfo.ToArray())
            {
                if (seatinfo.IsCircular && previousSeat != null && previousSeat.PhysicalFlightID > 0 && seatinfo.PhysicalFlightID > 0)
                {
                    SeatCharge seata = new SeatCharge();
                    if (seatinfo.Seat_Charges != null)
                    {
                        seata = (from p in seatinfo.Seat_Charges
                                 where previousSeat.Row == p.RowNumber && previousSeat.SeatNumber == p.Seat
                                 select p).FirstOrDefault();
                    }
                    if (seata != null && seata.RowNumber != 0 && seata.Seat != string.Empty)
                    {
                        colSpecialService.Add(new SpacialServiceAndSeat()
                        {
                            Special_Service = new SpecialService()
                            {
                                CodeType = seata.ServiceCode.Trim(),
                                ServiceID = -2147483648,
                                SSRCategory = 21,
                                LogicalFlightID = item.LFID,
                                DepartureDate = item.DepartureDate.Date,
                                Amount = seata.Amount,
                                OverrideAmount = false,
                                CurrencyCode = ReservationService.EnumerationsCurrencyCodeTypes.AED,
                                PersonOrgID = person.PersonOrgID,
                                ChargeComment = string.Empty
                            },
                            Seat_Charges = seata,
                            PhysicalFlightID = seatinfo.PhysicalFlightID
                        });
                        AlreadyTakenSeat.Add(new AlreadyTakenSeat()
                        {
                            PhysicalFlightID = seatinfo.PhysicalFlightID,
                            Row = seata.RowNumber,
                            SeatNumber = seata.Seat
                        });
                    }
                    else
                    {
                        colSpecialService.Add(new SpacialServiceAndSeat()
                        {
                            Special_Service = new SpecialService()
                            {
                                CodeType = previousSeat.ServiceCode.Trim(),
                                ServiceID = -2147483648,
                                SSRCategory = 21,
                                LogicalFlightID = item.LFID,
                                DepartureDate = item.DepartureDate.Date,
                                Amount = previousSeat.Amount,
                                OverrideAmount = false,
                                CurrencyCode = ReservationService.EnumerationsCurrencyCodeTypes.AED,
                                PersonOrgID = person.PersonOrgID,
                                ChargeComment = string.Empty
                            },
                            Seat_Charges = previousSeat.Seat_Charges,
                            PhysicalFlightID = seatinfo.PhysicalFlightID
                        });
                        AlreadyTakenSeat.Add(new AlreadyTakenSeat()
                        {
                            PhysicalFlightID = seatinfo.PhysicalFlightID,
                            Row = previousSeat.Row,
                            SeatNumber = previousSeat.SeatNumber
                        });
                    }
                }
                else
                {
                    SeatCharge seat = new SeatCharge();
                    List<CreatePNR_AutomationApp.FlightService.SeatAssignment> assignedSeats = seatinfo.Seat_Assignment;
                    if (assignedSeats == null)
                        assignedSeats = new List<FlightService.SeatAssignment>();
                    if (AlreadyTakenSeat != null && AlreadyTakenSeat.Count > 0)
                    {
                        var seatForPhysicalFlight = (from p in AlreadyTakenSeat
                                                     where p.PhysicalFlightID == seatinfo.PhysicalFlightID
                                                     select p).ToList();
                        foreach (var takenitem in seatForPhysicalFlight)
                        {

                            assignedSeats.Add(new FlightService.SeatAssignment()
                            {
                                Seat = takenitem.SeatNumber,
                                RowNumber = takenitem.Row
                            });

                        }

                    }
                    if (assignedSeats != null && assignedSeats.Count > 0)
                    {
                        //seat = (from p in seatinfo.Seat_Charges
                        //        join
                        //            c in assignedSeats on
                        //            new { p.Seat, p.RowNumber } equals new { c.Seat, c.RowNumber }
                        //        where (c.RowNumber != p.RowNumber && c.Seat != p.Seat)
                        //        select p).FirstOrDefault();
                        if (seatinfo.Seat_Charges != null)
                            seat = (from p in seatinfo.Seat_Charges
                                    where !assignedSeats.Any(x => x.RowNumber == p.RowNumber && x.Seat == p.Seat)
                                    select p).FirstOrDefault();

                    }
                    else
                    {
                        if (seatinfo.Seat_Charges != null)
                            seat = (from p in seatinfo.Seat_Charges
                                    select p).FirstOrDefault();
                    }
                    if (seat != null && seat.RowNumber != 0 && seat.Seat != string.Empty)
                    {

                        colSpecialService.Add(new SpacialServiceAndSeat()
                        {
                            Special_Service = new SpecialService()
                            {
                                CodeType = seat.ServiceCode.Trim(),
                                ServiceID = -2147483648,
                                SSRCategory = 21,
                                LogicalFlightID = item.LFID,
                                DepartureDate = item.DepartureDate.Date,
                                Amount = seat.Amount,
                                OverrideAmount = false,
                                CurrencyCode = ReservationService.EnumerationsCurrencyCodeTypes.AED,
                                PersonOrgID = person.PersonOrgID,
                                ChargeComment = string.Empty
                            },
                            Seat_Charges = seat,
                            PhysicalFlightID = seatinfo.PhysicalFlightID
                        });
                        AlreadyTakenSeat.Add(new AlreadyTakenSeat()
                        {
                            PhysicalFlightID = seatinfo.PhysicalFlightID,
                            Row = seat.RowNumber,
                            SeatNumber = seat.Seat
                        });
                        previousSeat.Seat_Charges = seat;
                        previousSeat.ServiceCode = seat.ServiceCode;
                        previousSeat.Amount = seat.Amount;
                        previousSeat.PhysicalFlightID = seatinfo.PhysicalFlightID;
                        previousSeat.Row = seat.RowNumber;
                        previousSeat.SeatNumber = seat.Seat;

                    }
                }
            }
            return colSpecialService;
        }