// GET: DataEntry/Edit/5
        public async Task <ActionResult> Rekomandimet()
        {
            var user = await GetUser();

            var rekomandimet = (USER_DATA)Session["perdoruesi"];
            var meals        = db.USER_RATING.ToList();

            if (rekomandimet != null)
            {
                meals = db.USER_RATING.Where(q => q.UserID == rekomandimet.UserID).OrderByDescending(q => q.RatingID).Take(4).ToList();
                if (meals.Count() == 0)
                {
                    var rand  = new Random();
                    var lista = db.USER_RATING.Take(30).ToList();
                    List <USER_RATING> ushqimet = new List <USER_RATING>();
                    for (int i = 0; i < 6; i++)
                    {
                        int         r = rand.Next(lista.Count);
                        USER_RATING m = lista.Skip(r).First();
                        if (!ushqimet.Contains(m))
                        {
                            ushqimet.Add(m);
                        }
                    }
                    meals = ushqimet;
                }
            }
            else
            {
                meals = db.USER_RATING.Take(4).ToList();
            }


            return(View(meals));
        }
        public async Task <ActionResult> CalculatePearson(IList <USER_RATING> meals_model)
        {
            Session["meals"] = null;
            Session["listaPerfundimtare"] = null;
            var user = await GetUser();

            MessageJS returnmodel = new MessageJS();
            List <Pearson_Corelation> pearson_corelation = new List <Pearson_Corelation>();

            if (ModelState.IsValid)
            {
                try
                {
                    //kshyrmi ne db qe contains krejt qeto meals qe i ban rating useri

                    var meals_db = db.USER_RATING.Where(q => q.UserID != user.ID).Select(q => q.MealID).ToList();

                    var meals_common = meals_model.Where(c => meals_db.Contains(c.MealID)).Select(q => q.MealID).ToList();

                    //mirret lista e itemsave nga db per qeto meals (vetem userat e ngjajshem)
                    var lista = db.USER_RATING.Where(q => meals_common.Contains(q.MealID)).ToList();

                    float Pearson_Score = 0;

                    //grupimi ne baze te userave
                    foreach (var item in lista.GroupBy(q => q.UserID))
                    {
                        List <int> item_in_corelation = new List <int>();

                        List <int> item_in_corelation_db = new List <int>();

                        //secili rating per meals te njejte te user i qasur dhe userave te tjere futet ne listat perkatese
                        foreach (var item1 in item)
                        {
                            var lista_userit = meals_model.Where(q => q.MealID == item1.MealID).FirstOrDefault();
                            if (lista_userit != null)
                            {
                                item_in_corelation.Add(lista_userit.RatingID);

                                item_in_corelation_db.Add(item1.RatingID);
                            }
                            else
                            {
                                break;
                            }
                        }
                        //kalkulohet pearson

                        Pearson_Score = Coleration(item_in_corelation, item_in_corelation_db, item_in_corelation.Count());

                        pearson_corelation.Add(new Pearson_Corelation {
                            UserID = item.Key, PearsonScore = Pearson_Score
                        });
                    }

                    //most similar scores;
                    var lista_perfundimtare = pearson_corelation.OrderByDescending(q => q.PearsonScore).Take(3).ToList();

                    Session["listaPerfundimtare"] = lista_perfundimtare;

                    Session["meals"] = meals_model.ToList();

                    //insertimi i te dhenave ne baze


                    foreach (var item in meals_model)
                    {
                        USER_RATING model = new USER_RATING();

                        var exist = db.USER_RATING.Any(q => q.MealID == item.MealID && q.UserID == user.ID);

                        var ratings = db.USER_RATING.Where(q => q.MealID == item.MealID && q.UserID == user.ID).ToList();

                        model.UserID = user.ID;

                        var average_rating = (item.RatingID + ratings.Sum(q => q.RatingID)) / (1 + ratings.Count());

                        model.RatingID = item.RatingID;

                        model.MealID = item.MealID;


                        if (!exist)
                        {
                            db.USER_RATING.Add(model);
                        }


                        await db.SaveChangesAsync();
                    }


                    returnmodel.Message = "Sukses";
                    returnmodel.Status  = true;
                    return(Json(returnmodel, JsonRequestBehavior.AllowGet));
                }
                catch (Exception ex)
                {
                    returnmodel.Message = "Ka ndodhur nje gabim";
                    returnmodel.Status  = false;
                    return(Json(returnmodel, JsonRequestBehavior.AllowGet));
                }
            }

            return(Json(returnmodel, JsonRequestBehavior.AllowGet));
        }