public IHttpActionResult GetSearchHostApartments(SearchApartment apartmentDetails)
        {
            ICollection <Apartman> apartments = GetFiltredHostApartments(apartmentDetails);

            List <ApartmentBM> apartmentsInfo = new List <ApartmentBM>();

            foreach (var apartment in apartments)
            {
                ApartmentBM apartmentBM = GetApartmentInfo(apartment);
                apartmentsInfo.Add(apartmentBM);
            }


            return(Ok(apartmentsInfo));
        }
        public IHttpActionResult GetSearchApartments(SearchApartment apartmentDetails)
        {
            ICollection <Apartman> apartments = null;

            if (CheckRole("Admin"))
            {
                apartments = GetFiltredApartments(apartmentDetails, "Status");
            }
            else
            {
                apartments = GetFiltredApartments(apartmentDetails, "");
            }
            List <ApartmentBM> apartmentsInfo = new List <ApartmentBM>();

            foreach (var apartment in apartments)
            {
                ApartmentBM apartmentBM = GetApartmentInfo(apartment);
                apartmentsInfo.Add(apartmentBM);
            }


            return(Ok(apartmentsInfo));
        }
        public ICollection <Apartman> GetFiltredHostApartments(SearchApartment searchApartment) //kada uradi search u home i za admina ulazi ovde
        {
            ICollection <Apartman> apartments = context.Apartmans.Where(x => x.Deleted == false && x.HostID == searchApartment.HostID).ToList();


            if (searchApartment.ApartmentStatus != null && searchApartment.ApartmentStatus != "")
            {
                apartments = apartments.Where(x => x.Status.ToString() == searchApartment.ApartmentStatus).ToList();
            }

            if (searchApartment.GuestNumber > 0)
            {
                apartments = apartments.Where(x => x.GuestNumber == searchApartment.GuestNumber).ToList();
            }
            if (searchApartment.MaxPrice > 0)
            {
                apartments = apartments.Where(x => x.PricePerNight <= searchApartment.MaxPrice).ToList();
            }
            if (searchApartment.MaxRooms > 0)
            {
                apartments = apartments.Where(x => x.RoomNumber <= searchApartment.MaxRooms).ToList();
            }
            if (searchApartment.MinRooms > 0)
            {
                apartments = apartments.Where(x => x.RoomNumber >= searchApartment.MinRooms).ToList();
            }
            if (searchApartment.Settlement != "" && searchApartment.Settlement != null)
            {
                apartments = apartments.Where(x => x.Location.Adress.Settlement == searchApartment.Settlement).ToList();
            }
            if (searchApartment.ApartmentType != "" && searchApartment.ApartmentType != null)
            {
                apartments = apartments.Where(x => x.Type.ToString() == searchApartment.ApartmentType).ToList();
            }
            if (searchApartment.Amenities.Count > 0)
            {
                ICollection <Apartman> helpApartments = new HashSet <Apartman>();
                foreach (Apartman apartment in apartments)
                {
                    helpApartments.Add(apartment);
                }

                foreach (string ammen in searchApartment.Amenities)
                {
                    foreach (Apartman apar in helpApartments)
                    {
                        var helpApartment = apar.Amenities.Where(x => x.Name == ammen).FirstOrDefault();
                        if (helpApartment == null && apartments.Contains(apar))
                        {
                            apartments.Remove(apar);
                        }
                    }
                }
            }
            //za godinu dobija 0001 kao godinu ako nije odabrao
            if (searchApartment.CheckIn.Year.ToString() != "1" && searchApartment.CheckOut.Year.ToString() != "1")
            {
                ICollection <Apartman> helpApartments = new HashSet <Apartman>();
                foreach (Apartman apartment in apartments)
                {
                    helpApartments.Add(apartment);
                }

                foreach (Apartman apar in helpApartments)
                {
                    DateTime currentDate = searchApartment.CheckIn;



                    while (currentDate <= searchApartment.CheckOut)
                    {
                        var helpApartment = apar.RentDates.Where(x => x.RentDate.Year == currentDate.Year && x.RentDate.Month == currentDate.Month && x.RentDate.Day == currentDate.Day && x.Available == true).FirstOrDefault();
                        if (helpApartment == null && apartments.Contains(apar))
                        {
                            apartments.Remove(apar);
                            break;
                        }

                        currentDate = currentDate.AddDays(1);
                    }
                }
            }
            else if (searchApartment.CheckIn.Year.ToString() != "1")
            {
                ICollection <Apartman> helpApartments = new HashSet <Apartman>();
                foreach (Apartman apartment in apartments)
                {
                    helpApartments.Add(apartment);
                }

                foreach (Apartman apar in helpApartments)
                {
                    var helpApartment = apar.RentDates.Where(x => x.RentDate.Year == searchApartment.CheckIn.Year && x.RentDate.Month == searchApartment.CheckIn.Month && x.RentDate.Day == searchApartment.CheckIn.Day && x.Available == true).FirstOrDefault();
                    if (helpApartment == null && apartments.Contains(apar))
                    {
                        apartments.Remove(apar);
                    }
                }
            }

            return(apartments);
        }