public KnjigeDetailPage(Model.Knjige knjiga)
 {
     InitializeComponent();
     BindingContext = model = new KnjigeDetailViewModel()
     {
         Knjiga = knjiga
     };
 }
        private Dictionary <int, List <KnjigeSlicnosti> > slicnosti = new Dictionary <int, List <KnjigeSlicnosti> >(); //Cosine similarity

        public List <Model.Knjige> GetRecommendedProducts(int kupacId)
        {
            List <Ocjene> commonRatings1 = new List <Ocjene>();
            List <Ocjene> commonRatings2 = new List <Ocjene>();

            GetNeOcjenjeneKnjige(kupacId); //ne ocjenjene knjige kupca
            GetProductsData();             //knjige koje su ocjenjene

            List <KnjigeSlicnosti> row = new List <KnjigeSlicnosti>();

            for (int i = 0; i < NeOcjenjeneKnjige.Values.Count; i++)
            {
                for (int j = 0; j < OcjenjeKnjige.Values.Count; j++)
                {
                    var p = NeOcjenjeneKnjige.Values.ElementAt(i).Select(s => s.KnjigaId).First();
                    var q = OcjenjeKnjige.Values.ElementAt(j).Select(s => s.KnjigaId).First();
                    if (p == q)
                    {
                        row.Add(new KnjigeSlicnosti()
                        {
                            KnjigaId = q, Slicnost = 0f
                        });
                        continue;
                    }
                    foreach (var item in NeOcjenjeneKnjige.Values.ElementAt(i))
                    {
                        foreach (var item2 in OcjenjeKnjige.Values.ElementAt(j))
                        {
                            if (item.KupacId == item2.KupacId)
                            {
                                commonRatings1.Add(item);
                                commonRatings2.Add(item2);
                            }
                        }
                    }
                    double sim2 = CalculateSimilarity(commonRatings1, commonRatings2);
                    commonRatings1.Clear();
                    commonRatings2.Clear();
                    row.Add(new KnjigeSlicnosti()
                    {
                        KnjigaId = q, Slicnost = sim2
                    });
                }
                var NoviRed = new List <KnjigeSlicnosti>(row);
                slicnosti.Add(NeOcjenjeneKnjige.Keys.ElementAt(i), NoviRed);
                row.Clear();
            }

            double brojnik  = 0;
            double nazivnik = 0;
            double suma     = 0;
            List <KnjigeSlicnosti> preporuke = new List <KnjigeSlicnosti>();

            for (int i = 0; i < slicnosti.Values.Count; i++)
            {
                foreach (var item in slicnosti.Values.ElementAt(i))
                {
                    if (item.Slicnost > 0.6f)
                    {
                        var p = _context.Ocjene.Where(w => w.KupacId == 1 && w.KnjigaId == item.KnjigaId).ToList();
                        if (p.Count() > 0)
                        {
                            brojnik  += item.Slicnost * p.Average(a => a.Ocjena);
                            nazivnik += item.Slicnost;
                        }
                    }
                }
                suma = brojnik / nazivnik;
                preporuke.Add(new KnjigeSlicnosti()
                {
                    KnjigaId = slicnosti.Keys.ElementAt(i), Slicnost = suma
                });
            }

            List <Model.Knjige> preporuceneKnjige = new List <Model.Knjige>();

            foreach (var item in preporuke)
            {
                if (item.Slicnost >= 3)
                {
                    var knjiga = _context.Knjige.Where(w => w.KnjigaId == item.KnjigaId).FirstOrDefault();

                    var modelknjiga = new Model.Knjige()
                    {
                        KnjigaId             = knjiga.KnjigaId,
                        Sifra                = knjiga.Sifra,
                        OriginalniNaziv      = knjiga.OriginalniNaziv,
                        Naziv                = knjiga.Naziv,
                        Isbn                 = knjiga.Isbn,
                        GodinaIzdanja        = knjiga.GodinaIzdanja,
                        BrojStrana           = knjiga.BrojStrana,
                        Jezik                = knjiga.Jezik,
                        Sadrzaj              = knjiga.Sadrzaj,
                        Izdanje              = knjiga.Izdanje,
                        Cijena               = knjiga.Cijena,
                        Format               = knjiga.Format,
                        SlikaNaslovnice      = knjiga.SlikaNaslovnice,
                        SlikaNaslovniceThumb = knjiga.SlikaNaslovniceThumb,
                        Knjiga               = knjiga.Knjiga,
                        UzorakKnjige         = knjiga.UzorakKnjige,
                        Status               = knjiga.Status,
                        KolekcijaId          = knjiga.KolekcijaId,
                        IzdavacId            = knjiga.IzdavacId,
                    };

                    var izdavac = _context.Izdavaci.Where(w => w.IzdavacId == modelknjiga.IzdavacId).FirstOrDefault();

                    modelknjiga.Izdavac = new Model.Izdavaci()
                    {
                        IzdavacId       = izdavac.IzdavacId,
                        Naziv           = izdavac.Naziv,
                        GodinaOsnivanja = izdavac.GodinaOsnivanja,
                        KontaktOsoba    = izdavac.KontaktOsoba,
                        KontaktTelefon  = izdavac.KontaktTelefon,
                        KontaktEmail    = izdavac.KontaktEmail,
                        Status          = izdavac.Status,
                        GradId          = izdavac.GradId
                    };

                    preporuceneKnjige.Add(modelknjiga);
                }
            }
            return(preporuceneKnjige);
        }