public List <UserAddSkills_Result> AddSkills([FromBody] UserSkills skill)

        {
            FRDBEntities db = new FRDBEntities();

            return(db.UserAddSkills(skill.email, skill.id, skill.rating).ToList <UserAddSkills_Result>());
        }
        public List <UserAddInterests_Result> AddInterests([FromBody] UserInterests interest)

        {
            FRDBEntities db = new FRDBEntities();

            return(db.UserAddInterests(interest.email, interest.id, interest.rating).ToList <UserAddInterests_Result>());
        }
      public UserSignIn_Result SignIn([FromBody] User user)

      {
          FRDBEntities db = new FRDBEntities();

          return(db.UserSignIn(user.email, user.password).First <UserSignIn_Result>());
      }
        public List <GetUserSkills_Result> Skills([FromBody] UserSkills skill)

        {
            FRDBEntities db = new FRDBEntities();

            return(db.GetUserSkills(skill.email).ToList <GetUserSkills_Result>());
        }
        public List <GetUserInterests_Result> Interests([FromBody] UserInterests interest)

        {
            FRDBEntities db = new FRDBEntities();

            return(db.GetUserInterests(interest.email).ToList <GetUserInterests_Result>());
        }
        public List <String> Hobbies([FromBody] UserHobbies hobby)

        {
            FRDBEntities db = new FRDBEntities();

            return(db.GetUserHobbies(hobby.email).ToList <String>());
        }
        public List <UserAddHobbies_Result> AddHobbies([FromBody] UserHobbies hobby)

        {
            FRDBEntities        db        = new FRDBEntities();
            GetHobbyById_Result userHobby = db.GetHobbyById(hobby.id).FirstOrDefault <GetHobbyById_Result>();

            return(db.UserAddHobbies(hobby.email, userHobby.name).ToList <UserAddHobbies_Result>());
        }
        public GetUserInfo_Result UserProfile([FromBody] CustomModels userData)
        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.GetUserInfo(userData.email).FirstOrDefault <GetUserInfo_Result>());
            }
        }
        public List <GetAllPreDegree_Result> AllQual()

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.GetAllPreDegree().ToList <GetAllPreDegree_Result>());
            }
        }
        public List <GetAllLocation_Result> AllLocation()

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.GetAllLocation().ToList <GetAllLocation_Result>());
            }
        }
        public int DeleteSkills([FromBody] UserInterest interest)

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.DeleteUserInterest(interest.user, interest.id));
            }
        }
        public int DeleteHobbies([FromBody] UserHobbies hobby)

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.DeleteUserHobbies(hobby.user, hobby.id));
            }
        }
        public int DeleteSkills([FromBody] UserSkill skill)

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.DeleteUserSkills(skill.user, skill.id));
            }
        }
        public List <String> Hobbies([FromBody] CustomModels hobby)

        {
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                return(db.GetUserHobbies(hobby.email).ToList <String>());
            }
        }
      public int SignUp([FromBody] CustomModels userData)
      {
          FRDBEntities db = new FRDBEntities();
          int          id = db.GetUserId(userData.email).FirstOrDefault <int?>() ?? default(int);;

          if (id.Equals(0))
          {
              return(db.UserSignUp(userData.email, userData.password, userData.firstName, userData.lastName, userData.percentage, userData.annualBudget, userData.location, userData.qualification));
          }
          return(0);
      }
        public GetUserInfo_Result EditProfile([FromBody] CustomModels userData)
        {
            FRDBEntities db  = new FRDBEntities();
            FRDBEntities db1 = new FRDBEntities();

            using (db)
            {
                db.UpdateUserInfo(userData.email, userData.firstName, userData.lastName, userData.percentage, userData.annualBudget, userData.location, userData.qualification);
            }


            return(db1.GetUserInfo(userData.email).FirstOrDefault <GetUserInfo_Result>());
        }
        public List <RecommendModel> Recommendation([FromBody] UserSkills skill)

        {
            List <RecommendModel>            RecommendResult = new List <RecommendModel>();
            List <GetRecommenadation_Result> result          = new List <GetRecommenadation_Result>();

            GetUserInfo_Result userInfo = new GetUserInfo_Result();

            using (FRDBEntities db = new FRDBEntities())
            {
                result = db.GetRecommenadation(skill.email).ToList <GetRecommenadation_Result>();
            }

            using (FRDBEntities db = new FRDBEntities())
            {
                userInfo = db.GetUserInfo(skill.email).FirstOrDefault <GetUserInfo_Result>();
            }

            foreach (var obj in result)
            {
                if (obj.annualFee <= userInfo.annualBudget && obj.location == getLocation(userInfo.location) && obj.percentage <= userInfo.percentage && obj.rating > 0)

                {
                    if (obj.rating >= 60)
                    {
                        RecommendResult.Add(new RecommendModel {
                            ratingType = "Highly Recommended", UniversityName = getUniversity(obj.uniId).name, Degree = getDegree(obj.degree).name, fee = obj.annualFee, rating = obj.rating ?? 0, url = getUniversity(obj.uniId).website
                        });
                    }
                    else if (obj.rating <= 60 && obj.rating >= 30)
                    {
                        RecommendResult.Add(new RecommendModel {
                            ratingType = "Moderatly Recommended", UniversityName = getUniversity(obj.uniId).name, Degree = getDegree(obj.degree).name, fee = obj.annualFee, rating = obj.rating ?? 0, url = getUniversity(obj.uniId).website
                        });
                    }
                    else
                    {
                        RecommendResult.Add(new RecommendModel {
                            ratingType = "slightly Recommended", UniversityName = getUniversity(obj.uniId).name, Degree = getDegree(obj.degree).name, fee = obj.annualFee, rating = obj.rating ?? 0, url = getUniversity(obj.uniId).website
                        });
                    }
                }
            }
            return(RecommendResult);
        }
        public void Execute(IJobExecutionContext context)
        {
            List <TestDataSet> Recommendations = new List <TestDataSet>();

            Recommendations = Main();

            using (FRDBEntities db = new FRDBEntities())
            {
                db.DeleteRecommenadations();
            }
            foreach (var recommend in Recommendations)
            {
                using (FRDBEntities db = new FRDBEntities())
                {
                    db.AddRecommenadation(recommend.uid, Convert.ToInt32(recommend.major), (int)(recommend.probabilty * 100));
                }
            }
        }
        public int DeleteSkills([FromBody] DeleteModels skill)

        {
            FRDBEntities db = new FRDBEntities();
            int          SkillId, UserId;

            using (FRDBEntities db1 = new FRDBEntities())
            {
                SkillId = db1.GetSkillByName(skill.value).FirstOrDefault <GetSkillByName_Result>().id;
            }
            using (FRDBEntities db2 = new FRDBEntities())
            {
                UserId = db2.GetUserId(skill.email).FirstOrDefault() ?? 0;
            }
            using (db)
            {
                return(db.DeleteUserSkills(UserId, SkillId));
            }
        }
        public int DeleteInterset([FromBody] DeleteModels interest)

        {
            FRDBEntities db = new FRDBEntities();
            int          interestId, UserId;

            using (FRDBEntities db1 = new FRDBEntities())
            {
                interestId = db1.GetInterestByName(interest.value).FirstOrDefault <GetInterestByName_Result>().id;
            }
            using (FRDBEntities db2 = new FRDBEntities())
            {
                UserId = db2.GetUserId(interest.email).FirstOrDefault() ?? 0;
            }
            using (db)
            {
                return(db.DeleteUserInterest(UserId, interestId));
            }
        }
        public object GetTrainingData()
        {
            using (FRDBEntities db = new FRDBEntities())
            {
                TrainingData = db.GetTrainingData().ToList <GetTrainingData_Result>();
            }

            foreach (var item in TrainingData)
            {
                InformationModel <string> temp = new InformationModel <string>();
                temp.Lable    = item.MajorLabel.ToString();
                temp.Features = new List <string>()
                {
                    item.skill, BinData(item.skill, item.skillrate), item.interest, BinData(item.interest, item.interestrate)
                };
                data.Add(temp);
            }



            return(data);
        }
        public int DeleteHobbies([FromBody] DeleteModels hobby)

        {
            FRDBEntities db = new FRDBEntities();
            FRDBEntities db1 = new FRDBEntities();
            int          id, hid;

            using (db1)

            {
                int?i = db1.GetUserId(hobby.email).FirstOrDefault();
                id = i ?? 0;
            }
            using (FRDBEntities db2 = new FRDBEntities())
            {
                hid = db2.GetHobbyByName(hobby.value).FirstOrDefault <GetHobbyByName_Result>().id;
            }
            using (db)

            {
                return(db.DeleteUserHobbies(id, hid));
            }
        }
        public List <GetAllHobby_Result> hobbies([FromBody] UserSkills skill)

        {
            List <GetAllHobby_Result> temp      = new List <GetAllHobby_Result>();
            List <GetAllHobby_Result> result    = new List <GetAllHobby_Result>();
            List <string>             checkList = new List <string>();
            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                checkList = db.GetUserHobbies(skill.email).ToList <string>();

                temp = db.GetAllHobby().ToList <GetAllHobby_Result>();
                foreach (GetAllHobby_Result obj in temp)
                {
                    if (!(checkList.Any(x => x == obj.name)))
                    {
                        result.Add(obj);
                    }
                }
            }
            return(result);
        }
        public List <GetAllInterest_Result> interest([FromBody] UserSkills skill)

        {
            List <GetAllInterest_Result>   temp      = new List <GetAllInterest_Result>();
            List <GetAllInterest_Result>   result    = new List <GetAllInterest_Result>();
            List <GetUserInterests_Result> checkList = new List <GetUserInterests_Result>();

            FRDBEntities db = new FRDBEntities();

            using (db)
            {
                checkList = db.GetUserInterests(skill.email).ToList <GetUserInterests_Result>();

                temp = db.GetAllInterest().ToList <GetAllInterest_Result>();
                foreach (GetAllInterest_Result obj in temp)
                {
                    if (!(checkList.Any(x => x.name == obj.name)))
                    {
                        result.Add(obj);
                    }
                }
                return(result);
            }
        }
        public List <TestDataSet> Main()
        {
            IDataProvider                        dataProvider = new MockDataProvider();
            List <GetTestData_Result>            tempData     = new List <GetTestData_Result>();
            List <TestDataSet>                   testData     = new List <TestDataSet>();
            List <IDictionary <string, double> > dictionaries = new List <IDictionary <string, double> >();

            using (FRDBEntities db = new FRDBEntities())
            {
                tempData = db.GetTestData().ToList <GetTestData_Result>();
            }

            Classifier <string> classifier = new Classifier <string>();
            var sampleData = dataProvider.GetTrainingData() as List <InformationModel <string> >;

            classifier.Teach(sampleData);
            int temp = tempData.FirstOrDefault <GetTestData_Result>().UserID;
            List <GetTestData_Result> list = new List <GetTestData_Result>();
            int lenth = tempData.Count;
            int count = 1;

            foreach (var item in tempData)
            {
                if (temp == item.UserID)
                {
                    IDictionary <string, double> dict = classifier.Classify(new List <string>()
                    {
                        item.skill, BinData(item.skill, item.skillrate), item.interest, BinData(item.interest, item.interestrate)
                    });
                    dictionaries.Add(dict);
                    if (count == lenth)
                    {
                        foreach (var d in add(dictionaries))
                        {
                            testData.Add(new TestDataSet {
                                uid = temp, major = d.Key, probabilty = d.Value
                            });
                        }
                    }
                }
                else
                {
                    foreach (var d in add(dictionaries))
                    {
                        testData.Add(new TestDataSet {
                            uid = temp, major = d.Key, probabilty = d.Value
                        });
                    }

                    temp = item.UserID;
                    dictionaries.Clear();
                    IDictionary <string, double> dict = classifier.Classify(new List <string>()
                    {
                        item.skill, BinData(item.skill, item.skillrate), item.interest, BinData(item.interest, item.interestrate)
                    });
                    dictionaries.Add(dict);
                }
                count++;
            }

            return(testData);
        }