public async Task <IActionResult> CreateReservation(FilterCar filterCar)
        {
            if (filterCar.City1 != "" && filterCar.City2 != "" && filterCar.endDay != null && filterCar.startDay != null && filterCar.Mark != "" && filterCar.Number.ToString() != "")
            {
                ReservationCar rc = new ReservationCar();

                rc.City1 = filterCar.City1;
                rc.City2 = filterCar.City2;
                rc.Day1  = filterCar.startDay;
                rc.Day2  = filterCar.endDay;
                // rc.Car = filterCar.Id;

                //ApplicationUser user = await _userManager.Users.Include(x => x.ReservationCars).ThenInclude(x => x.Car).ThenInclude(x => x.Reservations).SingleOrDefaultAsync(x => x.Id == filterCar.Id);
                // var pomUser = _userManager.Users.Include(x => x.ReservationCars).ThenInclude(x => x.Car).SingleOrDefault(x => x.Id == filterCar.IdUser);
                var pomCar = context.Cars.Include(x => x.CarCompany).ToList().SingleOrDefault(x => x.Id == filterCar.Id);

                var pomUser = await _userManager.FindByIdAsync(filterCar.IdUser);


                rc.IdCar     = pomCar.Id;
                rc.IdUser    = pomUser.Id;
                rc.IdCompany = pomCar.CarCompany.Id.ToString();

                TimeSpan t = filterCar.endDay - filterCar.startDay;

                var elapsedDays = Math.Abs(t.Days);

                var price = elapsedDays * Int32.Parse(pomCar.RentPerDay);

                rc.Price = price;

                context.ReservationCar.Add(rc);

                bool saveFailed;

                do
                {
                    saveFailed = false;
                    try
                    {
                        await context.SaveChangesAsync();
                    }
                    catch (DbUpdateConcurrencyException ex)
                    {
                        saveFailed = true;
                        return(null);
                    }
                    catch (Exception e)
                    {
                        throw;
                    }
                } while (saveFailed);

                return(Ok());
            }
            else
            {
                return(BadRequest());
            }
        }
        static void Main(string[] args)
        {
            /*
             * SayHelloToMe sayHello = new SayHelloToMe( DoSomething.GetHelloWorld );
             * SayHelloToMeWithMyName sayMyName = new SayHelloToMeWithMyName( DoSomething.GetHelloWorldWithName );
             * sayHello();
             *
             * sayMyName += DoSomething.GetHelloWorldToString;
             * sayMyName( "Sebastiano" );*/

            CarRepo myCars = new CarRepo();

            foreach (Car car in myCars.GetCarsDB())
            {
                Console.WriteLine("Macchina {0}, Modello {1}", car.Name, car.Model);
            }

            FilterCar myDelegate = new FilterCar(myCars.FilterCarByModel);

            var myFilteredCar = myDelegate("A72");

            Console.WriteLine("\n\n");
            Console.WriteLine(myDelegate.Method);
            foreach (Car car in myFilteredCar)
            {
                Console.WriteLine("Macchina {0}, Modello {1}", car.Name, car.Model);
            }

            myDelegate = myCars.FilterCarByName;

            myFilteredCar = myDelegate("Ciccio");
            Console.WriteLine("\n\n");
            Console.WriteLine(myDelegate.Method);
            foreach (Car car in myFilteredCar)
            {
                Console.WriteLine("Macchina {0}, Modello {1}", car.Name, car.Model);
            }

            //Func<string, List<Car>> FilterCar;

            Console.ReadLine();
        }
        public async Task <ActionResult <IEnumerable <CarFromModel> > > SearchAvailableCar(FilterCar filterCar)
        {
            List <CarFromModel> carFromModels = new List <CarFromModel>();

            CarCompany cc = new CarCompany();

            var listCompany = context.BranchOffices.Include(x => x.Id_company).ToList().SingleOrDefault(x => x.Id == Int32.Parse(filterCar.Id));

            if (listCompany == null)
            {
                var company = context.Companies.Find(Int32.Parse(filterCar.Id));
                cc = (CarCompany)company;
            }
            else
            {
                cc = listCompany.Id_company;
            }



            var rezervacije = context.ReservationCar.ToList();

            List <ReservationCar> filterReservation = new List <ReservationCar>();

            var pom = context.Carcompanies.Include(x => x.Cars).ToList().SingleOrDefault(x => x.Id == cc.Id).Cars.ToList();


            //PROVERITI DA LI SU KOLA NA POPUSTU

            var listaVozilaNaPopustu = context.DiscountCars.ToList();

            foreach (var popust in listaVozilaNaPopustu)
            {
                foreach (var auto in pom)
                {
                    if (auto.Id == popust.carId)
                    {
                        var poredjenje1 = DateTime.Compare(filterCar.startDay, popust.StartDay);
                        var poredjenje2 = DateTime.Compare(filterCar.endDay, popust.StartDay);

                        if (poredjenje1 < 0 && poredjenje2 < 0)
                        {
                            continue;
                        }
                        else if (poredjenje1 > 0 && poredjenje2 > 0)
                        {
                            var poredjenje3 = DateTime.Compare(filterCar.startDay, popust.EndDay);
                            var poredjenje4 = DateTime.Compare(filterCar.endDay, popust.EndDay);

                            if (poredjenje3 > 0 && poredjenje4 > 0)
                            {
                                continue;
                            }
                            else
                            {
                                carFromModels = null;
                                return(carFromModels);
                            }
                        }
                        else
                        {
                            carFromModels = null;
                            return(carFromModels);
                        }
                    }
                }
            }



            var pom1 = pom.FindAll(x => x.Mark.ToLower() == filterCar.Mark.ToLower());

            if (pom1.Count != 0)
            {
                var pom2 = pom1.FindAll(x => x.Seat == filterCar.Number.ToString());
                if (pom2.Count != 0)
                {
                    if (context.ReservationCar.ToList().Count == 0)
                    {
                        foreach (var cars in pom2)
                        {
                            CarFromModel cfm = new CarFromModel();
                            cfm.AirConditioning = cars.AirConditioning;
                            cfm.Bags            = Int32.Parse(cars.Bags);
                            cfm.Door            = Int32.Parse(cars.Door);
                            cfm.Fuel            = cars.Fuel;
                            cfm.Gearshift       = cars.Gearshift;
                            cfm.Id             = cars.Id;
                            cfm.ImageCar       = cars.ImageCar;
                            cfm.Mark           = cars.Mark;
                            cfm.RentPerDay     = Int32.Parse(cars.RentPerDay);
                            cfm.Seat           = Int32.Parse(cars.Seat);
                            cfm.YearProduction = Int32.Parse(cars.YearProduction);
                            cfm.Rating         = cars.AverageRating.ToString();
                            carFromModels.Add(cfm);
                        }
                    }

                    else
                    {
                        foreach (var cars in pom2)
                        {
                            var rez = rezervacije.FindAll(x => x.IdCar == cars.Id);
                            Model.ReservationCar rc = new Model.ReservationCar();

                            if (rez.Count() != 0)
                            {
                                foreach (var rezervacija in rez)
                                {
                                    int result  = DateTime.Compare(filterCar.startDay, rezervacija.Day1);
                                    int result2 = DateTime.Compare(filterCar.endDay, rezervacija.Day1);

                                    if (result < 0 && result2 < 0)
                                    {
                                        continue;
                                    }
                                    else if (result > 0 && result2 > 0)
                                    {
                                        int result3 = DateTime.Compare(filterCar.startDay, rezervacija.Day2);
                                        int result4 = DateTime.Compare(filterCar.endDay, rezervacija.Day2);


                                        if (result3 > 0 && result4 > 0)
                                        {
                                            continue;
                                        }
                                        else
                                        {
                                            carFromModels = null;
                                            return(carFromModels);
                                        }
                                    }
                                    else
                                    {
                                        carFromModels = null;
                                        return(carFromModels);
                                    }
                                }

                                TimeSpan t = filterCar.endDay - filterCar.startDay;

                                var elapsedDays = t.Days;

                                var price = elapsedDays * Int32.Parse(cars.RentPerDay);

                                CarFromModel cfm = new CarFromModel();
                                cfm.AirConditioning = cars.AirConditioning;
                                cfm.Bags            = Int32.Parse(cars.Bags);
                                cfm.Door            = Int32.Parse(cars.Door);
                                cfm.Fuel            = cars.Fuel;
                                cfm.Gearshift       = cars.Gearshift;
                                cfm.Id             = cars.Id;
                                cfm.ImageCar       = cars.ImageCar;
                                cfm.Mark           = cars.Mark;
                                cfm.RentPerDay     = Int32.Parse(cars.RentPerDay);
                                cfm.Seat           = Int32.Parse(cars.Seat);
                                cfm.YearProduction = Int32.Parse(cars.YearProduction);
                                cfm.Price          = price.ToString();
                                cfm.Rating         = cars.AverageRating.ToString();
                                carFromModels.Add(cfm);
                            }

                            else
                            {
                                foreach (var car in pom2)
                                {
                                    CarFromModel cfm = new CarFromModel();
                                    cfm.AirConditioning = car.AirConditioning;
                                    cfm.Bags            = Int32.Parse(car.Bags);
                                    cfm.Door            = Int32.Parse(car.Door);
                                    cfm.Fuel            = car.Fuel;
                                    cfm.Gearshift       = car.Gearshift;
                                    cfm.Id             = car.Id;
                                    cfm.ImageCar       = car.ImageCar;
                                    cfm.Mark           = car.Mark;
                                    cfm.RentPerDay     = Int32.Parse(car.RentPerDay);
                                    cfm.Seat           = Int32.Parse(car.Seat);
                                    cfm.YearProduction = Int32.Parse(car.YearProduction);
                                    cfm.Rating         = cars.AverageRating.ToString();
                                    carFromModels.Add(cfm);
                                }
                                return(carFromModels);
                            }
                        }


                        return(carFromModels);
                    }
                }
                else
                {
                    return(carFromModels);
                }
            }
            else
            {
                return(carFromModels);
            }

            return(carFromModels);
        }