// Remove Course
        public static async Task Remove(CourseModel course, string year = null, string term = null)
        {
            var courselist = await GetCourseList(year, term);

            for (int i = 0; i < courselist.Count; i++)
            {
                if (courselist[i].id == course.id)
                {
                    courselist.RemoveAt(i);
                }
            }
            SQLiteService.DeleteCourse(course.id);
        }
        // Add Course
        public static async Task <bool> Add(CourseModel course, string year = null, string term = null)
        {
            var courselist = await GetCourseList(year, term);

            if (CanAdd(course, courselist))
            {
                courselist.Add(course);
                SQLiteService.InsertCourse(course.id, course.name, course.classroom, course.period, course.day, course.sectionStart, course.sectionEnd, course.lessonIds);
                return(true);
            }
            else
            {
                Tools.ShowMsgAtFrame("有课程冲突");
                return(false);
            }
        }
        public static async Task <CourseModel> GetCourse(int day, int section, string year = null, string term = null, string week = null)
        {
            ObservableCollection <CourseModel> CourseList = ((App)App.Current).CourseList;
            CourseModel result     = null;
            var         resultList = new List <CourseModel>();

            foreach (var item in CourseList)
            {
                if (item.day == day && (item.sectionStart <= section && section <= item.sectionEnd))
                {
                    resultList.Add(item);
                    result = item;
                }
            }

            var isWeekValid = int.TryParse(week, out int _week);


            if (resultList.Count > 1 && isWeekValid)
            {
                foreach (var item in resultList)
                {
                    string[] weeks;
                    if (item.smartPeriod != null)
                    {
                        weeks = item.smartPeriod.Split(' ');
                    }
                    else
                    {
                        weeks = item.period.Split(' ', ',');
                    }
                    weeks = item.smartPeriod.Split(' ');

                    if (Array.IndexOf(weeks, week) >= 0)
                    {
                        result = item;
                        break;
                    }
                }
            }
            return(result);
        }
        /*
         * Field to add database operation
         * Begins
         *
         */

        public static async Task <ObservableCollection <CourseModel> > GetCourseListFromDatabase(string year = null, string term = null)
        {
            var CourseList        = new ObservableCollection <CourseModel>();
            SQLiteConnection conn = SQLiteService.conn;
            string           sql  = @"SELECT Id,Name,ClassRoom,Period,Day,SectionStart,SectionEnd,LessonIds FROM Course;";

            using (var statement = conn.Prepare(sql))
            {
                while (SQLiteResult.ROW == statement.Step())
                {
                    var c = new CourseModel(statement[0].ToString(), statement[1].ToString(), statement[2].ToString(), statement[3].ToString(),
                                            (int)(long)statement[4], (int)(long)statement[5], (int)(long)statement[6], statement[7].ToString());
                    var tt = 1;

                    CourseList.Add(new CourseModel(statement[0].ToString(), statement[1].ToString(), statement[2].ToString(), statement[3].ToString(),
                                                   (int)(long)statement[4], (int)(long)statement[5], (int)(long)statement[6], statement[7].ToString()));
                }
            }
            return(CourseList);
        }
        /*
         * Field to add database operation
         * Ends
         *
         */



        public static bool CanAdd(CourseModel Course, ObservableCollection <CourseModel> CourseList)
        {
            return(true);

            /* var CourseDir = new Dictionary<int, List<int>>();
             * bool can = true;
             * for (int i = 1; i < 8; i++)
             * {
             *   CourseDir.Add(i, new List<int>());
             * }
             * foreach (var item in CourseList)
             * {
             *   if (item.sectionStart == item.sectionEnd)
             *   {
             *       CourseDir[item.day].Add(item.sectionStart);
             *   }
             *   else
             *   {
             *       for (int i = 0; i < item.sectionEnd - item.sectionStart; i++)
             *       {
             *           CourseDir[item.day].Add(item.sectionStart + i);
             *       }
             *   }
             * }
             * if (Course.sectionStart == Course.sectionEnd)
             * {
             *   return !CourseDir[Course.day].Contains(Course.sectionStart);
             * }
             * else
             * {
             *   for (int i = 0; i < Course.sectionEnd - Course.sectionStart; i++)
             *   {
             *       if (CourseDir[Course.day].Contains(Course.sectionStart + i))
             *       {
             *           can = false;
             *       }
             *   }
             *   return can;
             * }
             */
        }
 public static async Task <bool> UpdateCourse(CourseModel course, string year = null, string term = null)
 {
     SQLiteService.UpdateCourse(course.id, course.name, course.classroom, course.period, course.day, course.sectionStart, course.sectionEnd, course.lessonIds);
     return(true);
 }