//Drugi sprint
        public IActionResult Dodaj()
        {
            NekretninaDodajVm model = new NekretninaDodajVm
            {
                Kategorije = db.Kategorije.Select(k => new SelectListItem
                {
                    Value = k.KategorijaID.ToString(),
                    Text  = k.KategorijaNaziv
                }).ToList(),
                Lokacija = db.Lokacije.Select(k => new SelectListItem
                {
                    Value = k.LokacijaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Grad = db.Gradovi.Select(k => new SelectListItem
                {
                    Value = k.GradID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Drzava = db.Drzave.Select(k => new SelectListItem
                {
                    Value = k.DrzavaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Karakteristike = db.Karakteristike.Select(k => new SelectListItem
                {
                    Value = k.KarakteristikeID.ToString(),
                    Text  = k.Naziv
                }).ToList()
            };


            return(View(model));
        }
        public IActionResult Detalji(int NekretninaID)
        {
            Nekretnina x = db.Nekretnine
                           .Include(g => g.Kategorija)
                           .Include(t => t.Lokacija)
                           .Include(k => k.Lokacija.Grad)
                           .Include(t => t.Lokacija.Grad.Drzava)

                           .Where(x => x.NekretninaID == NekretninaID).FirstOrDefault();



            NekretninaDodajVm model = new NekretninaDodajVm
            {
                NekretninaID = NekretninaID,
                Naziv        = x.Naziv,
                Opis         = x.Opis,
                Kvadratura   = x.Kvadratura,
                Cijena       = x.Cijena,
                BrojSoba     = x.BrojSoba,
                LokacijaID   = x.LokacijaID,
                GradID       = x.Lokacija.Grad.GradID,
                DrzavaID     = x.Lokacija.Grad.Drzava.DrzavaID,
                KategorijeID = x.KategorijaID,



                Kategorije = db.Kategorije.Select(k => new SelectListItem
                {
                    Value = k.KategorijaID.ToString(),
                    Text  = k.KategorijaNaziv
                }).ToList(),
                Lokacija = db.Lokacije.Select(k => new SelectListItem
                {
                    Value = k.LokacijaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Grad = db.Gradovi.Select(k => new SelectListItem
                {
                    Value = k.GradID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Drzava = db.Drzave.Select(k => new SelectListItem
                {
                    Value = k.DrzavaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Karakteristike = db.NekretninaKarakteristike
                                 .Where(i => i.NekretninaID == NekretninaID)
                                 .Select(k => new SelectListItem
                {
                    Value = k.Karakteristike.KarakteristikeID.ToString(),
                    Text  = k.Karakteristike.Naziv
                }).ToList(),
                Slike = db.Slike.Where(k => k.NekretninaID == NekretninaID).ToList()
            };

            return(View(model));
        }
        public IActionResult Uredi(int NekretninaID)
        {
            if (NekretninaID == 0)
            {
                return(StatusCode(400));
            }


            Nekretnina x = db.Nekretnine
                           .Include(g => g.Kategorija)
                           .Include(t => t.Lokacija)
                           .Include(k => k.Lokacija.Grad)
                           .Include(t => t.Lokacija.Grad.Drzava)
                           .Include(t => t.Slike)
                           .Where(x => x.NekretninaID == NekretninaID).FirstOrDefault();

            if (x == null)
            {
                return(StatusCode(404));
            }

            var selected = db.NekretninaKarakteristike.Where(i => i.NekretninaID == x.NekretninaID).Select(i => i.KarakteristikeID).ToList();

            NekretninaDodajVm model = new NekretninaDodajVm
            {
                NekretninaID = NekretninaID,
                Naziv        = x.Naziv,
                Opis         = x.Opis,
                Kvadratura   = x.Kvadratura,
                Cijena       = x.Cijena,
                BrojSoba     = x.BrojSoba,
                LokacijaID   = x.LokacijaID,
                GradID       = x.Lokacija.Grad.GradID,
                DrzavaID     = x.Lokacija.Grad.Drzava.DrzavaID,
                KategorijeID = x.KategorijaID,



                Kategorije = db.Kategorije.Select(k => new SelectListItem
                {
                    Value = k.KategorijaID.ToString(),
                    Text  = k.KategorijaNaziv
                }).ToList(),
                Lokacija = db.Lokacije.Select(k => new SelectListItem
                {
                    Value = k.LokacijaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Grad = db.Gradovi.Select(k => new SelectListItem
                {
                    Value = k.GradID.ToString(),
                    Text  = k.Naziv
                }).ToList(),
                Drzava = db.Drzave.Select(k => new SelectListItem
                {
                    Value = k.DrzavaID.ToString(),
                    Text  = k.Naziv
                }).ToList(),

                Karakteristike =

                    db.Karakteristike

                    .Select(k => new SelectListItem
                {
                    Value    = k.KarakteristikeID.ToString(),
                    Text     = k.Naziv,
                    Selected = selected.Contains(k.KarakteristikeID)
                }).ToList(),
                Slike = db.Slike.Where(k => k.NekretninaID == NekretninaID).ToList()
            };

            return(View("Dodaj", model));
        }
        public IActionResult Snimi(NekretninaDodajVm input)
        {
            Nekretnina x;



            if (input.NekretninaID == 0)
            {
                //ako je dodavanje
                x = new Nekretnina();
                //db.Nekretnine.Add(x);
                if (!ModelState.IsValid)
                {
                    return(Redirect("Dodaj"));
                }

                List <Slike> fileDetails = new List <Slike>();
                foreach (var slike in Request.Form.Files)

                {
                    if (slike != null && slike.Length > 0)
                    {
                        var   fileName   = Path.GetFileName(slike.FileName);
                        Slike fileDetail = new Slike()
                        {
                            MyImage    = fileName,
                            Ekstenzija = Path.GetExtension(fileName),
                            SlikeID    = Guid.NewGuid()
                        };
                        fileDetails.Add(fileDetail);
                        string uploadsFolder = Path.Combine(host.WebRootPath, "img");
                        var    path          = Path.Combine(uploadsFolder, fileDetail.SlikeID + fileDetail.Ekstenzija);
                        slike.CopyTo(new FileStream(path, FileMode.Create));
                    }
                }

                x.Slike = fileDetails;
                db.Nekretnine.Add(x);
                //db.SaveChanges();
            }

            else
            {
                //ako je uređivanje
                x = db.Nekretnine
                    .Include(i => i.Lokacija)
                    .Include(i => i.Lokacija.Grad)
                    .Include(i => i.Lokacija.Grad.Drzava)

                    .Where(i => i.NekretninaID == input.NekretninaID)
                    .FirstOrDefault();
                if (!ModelState.IsValid)
                {
                    return(Redirect("Uredi?NekretninaID=" + input.NekretninaID));
                }

                List <Slike> fileDetails = new List <Slike>();
                foreach (var slike in Request.Form.Files)

                {
                    if (slike != null && slike.Length > 0)
                    {
                        var   fileName   = Path.GetFileName(slike.FileName);
                        Slike fileDetail = new Slike()
                        {
                            MyImage      = fileName,
                            Ekstenzija   = Path.GetExtension(fileName),
                            SlikeID      = Guid.NewGuid(),
                            NekretninaID = input.NekretninaID     //nekretnina za koju se mijenja slika
                        };
                        fileDetails.Add(fileDetail);
                        string uploadsFolder = Path.Combine(host.WebRootPath, "img");
                        var    path          = Path.Combine(uploadsFolder, fileDetail.SlikeID + fileDetail.Ekstenzija);
                        slike.CopyTo(new FileStream(path, FileMode.Create));

                        db.Entry(fileDetail).State = EntityState.Added;     //db.Slike.Add(fileDetail);
                    }
                }

                db.Entry(x).State = EntityState.Modified;

                db.SaveChanges();
            }



            x.NekretninaID = input.NekretninaID;
            x.KategorijaID = input.KategorijeID;
            x.LokacijaID   = input.LokacijaID;
            x.BrojSoba     = input.BrojSoba ?? 0;
            x.Cijena       = input.Cijena ?? 0;
            x.Kvadratura   = input.Kvadratura ?? 0;
            x.Naziv        = input.Naziv;
            x.Opis         = input.Opis;



            db.SaveChanges();


            Lokacija y = db.Lokacije.Find(input.LokacijaID);

            y.GradID = input.GradID;


            db.SaveChanges();

            Grad z = db.Gradovi.Find(y.GradID);

            z.DrzavaID = input.DrzavaID;

            db.SaveChanges();


            var nekretninaKarakteristike = db.NekretninaKarakteristike
                                           .Include(i => i.Karakteristike)
                                           .Include(i => i.Nekretnina)
                                           .Where(i => i.NekretninaID == input.NekretninaID)
                                           .Select(i => i.KarakteristikeID)
                                           .ToList();

            var inputedKarakteristike = input.KarakteristikeID.ToList();


            if (input.NekretninaID != 0 && inputedKarakteristike != null)
            {
                //prvo obrisati višak
                var visakNekretnina = nekretninaKarakteristike.Except(inputedKarakteristike);
                foreach (var brisi in visakNekretnina)
                {
                    var zaBrisanje = db.NekretninaKarakteristike.Where(i => i.KarakteristikeID == brisi && i.NekretninaID == input.NekretninaID).FirstOrDefault();

                    db.Remove(zaBrisanje);
                }


                db.SaveChanges();


                //sada proci kroz sve inpute i provjeravati da li su karakteristike vec unesene, ako nisu unijeti ih, ako jesu - nista,neka ih
                foreach (var k in inputedKarakteristike)
                {
                    if (!nekretninaKarakteristike.Contains(k))
                    {
                        NekretninaKarakteristike nova = new NekretninaKarakteristike
                        {
                            NekretninaID     = input.NekretninaID,
                            KarakteristikeID = k
                        };
                        db.NekretninaKarakteristike.Add(nova);
                    }
                }


                db.SaveChanges();
            }
            else
            {
                foreach (var k in inputedKarakteristike)
                {
                    NekretninaKarakteristike nova = new NekretninaKarakteristike
                    {
                        NekretninaID     = x.NekretninaID,
                        KarakteristikeID = k
                    };
                    db.NekretninaKarakteristike.Add(nova);
                }


                db.SaveChanges();
            }


            TempData["WarningMessage"] = "Uspješno ste snimili nekretninu";
            return(Redirect("/Nekretnina/Prikazi"));
        }