/*
         * //读取上次已选择的教室信息
         * public void ReadSelectClassroomsConfig()
         * {
         *  IEnumerable<int> classroomIds = systemConfig.GetArrayConfig<int>("MonitorClassrooms");
         *  if (null == classroomIds) return;
         *  treeViewModel.MarkSelectedClassrooms(classroomIds);
         *  QueryTerminalInfos(TreeViewModel.SelectedClassrooms);
         *  sortTerminalInfos();
         * }
         * //保存已选择的教室信息
         * public void WriteSelectClassroomsConfig()
         * {
         *  systemConfig.SetArrayConfig<int>("MonitorClassrooms", TreeViewModel.SelectedClassrooms.Select(p => p.Id).ToList());
         *  systemConfig.WriteConfig();
         * }
         */
        private void sortTerminalInfos()
        {
            /*
             * ObservableExtensions.Sort<TerminalInfo>(TerminalInfos, (a, b) => {
             *  ClassRoom aClassroom = treeViewModel.SelectedClassrooms.Where(p => p.TerminalId.Equals(a.TerminalId)).FirstOrDefault();
             *  ClassRoom bClassroom = treeViewModel.SelectedClassrooms.Where(p => p.TerminalId.Equals(b.TerminalId)).FirstOrDefault();
             *  if (null != aClassroom && null != bClassroom)
             *  {
             *      if (aClassroom.ClassroomBuilding.Ord.Equals(bClassroom.ClassroomBuilding.Ord))
             *      {
             *          return aClassroom.RoomNum.CompareTo(bClassroom.RoomNum);
             *      }
             *      else
             *      {
             *          return aClassroom.ClassroomBuilding.Ord.CompareTo(bClassroom.ClassroomBuilding.Ord);
             *      }
             *  }
             *  else if (null == aClassroom)
             *  {
             *      return -1;
             *  }
             *  else
             *  {
             *      return 1;
             *  }
             * });
             */

            ICollection <TerminalInfo> sortTerminalInfos = TerminalInfos.OrderBy(p => treeViewModel.SelectedClassrooms.Where(o => o.TerminalId.Equals(p.TerminalId)).Select(o => o.ClassroomBuilding).FirstOrDefault().Ord)
                                                           .ThenBy(p => treeViewModel.SelectedClassrooms.Where(o => o.TerminalId.Equals(p.TerminalId)).Select(o => o.RoomNum).FirstOrDefault()).ToList();

            for (int i = 0; i < sortTerminalInfos.Count; i++)
            {
                TerminalInfos.Move(TerminalInfos.IndexOf(sortTerminalInfos.ElementAt(i)), i);
            }
        }
        //更新设备状态信息
        private void QueryTerminalInfos(ICollection <ClassRoom> classrooms)
        {
            ICollection <ClassroomBuilding> classroomBuildings = new List <ClassroomBuilding>();

            foreach (var classroom in classrooms)
            {
                classroomBuildings.Add(classroom.ClassroomBuilding);
                classroom.ClassroomBuilding = null;
            }
            //JsonSerializerSettings settings = new JsonSerializerSettings();
            //settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            //settings.MissingMemberHandling = MissingMemberHandling.Ignore;
            //string jClassrooms = JsonConvert.SerializeObject(classrooms, settings);
            //JArray j = JArray.Parse(jClassrooms);
            //object cls = j.ToObject<ICollection<ClassRoom>>();
            JObject jo = restConnection.Post("api/TerminalInfo/QueryLastTerminalInfos", classrooms);

            foreach (var classroom in classrooms)
            {
                classroom.ClassroomBuilding = classroomBuildings.ElementAt(classrooms.ToList().IndexOf(classroom));
            }
            if (jo.Value <bool>("success"))
            {
                JArray ja = jo.Value <JArray>("data");
                if (null != ja)
                {
                    Collection <TerminalInfo> terminalInfos = ja.ToObject <Collection <TerminalInfo> >();
                    foreach (var terminalInfo in terminalInfos)
                    {
                        ClassRoom classroom = classrooms.Where(p => p.TerminalId.Equals(terminalInfo.TerminalId)).FirstOrDefault();
                        if (null != classroom)
                        {
                            terminalInfo.Name = classroom.ClassroomBuilding.BuildingName + "_" + classroom.RoomNum;
                        }
                    }
                    //删除未选择的教室
                    ICollection <TerminalInfo> removeItems = TerminalInfos.Where(p => !terminalInfos.Select(o => o.TerminalId).Contains(p.TerminalId)).ToList();
                    foreach (var item in removeItems)
                    {
                        TerminalInfos.Remove(item);
                    }
                    //更新原选择教室的信息
                    PropertyInfo[] properties = typeof(TerminalInfo).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
                    foreach (var item in TerminalInfos)
                    {
                        TerminalInfo terminalInfo = terminalInfos.Where(p => p.TerminalId == item.TerminalId).FirstOrDefault();
                        if (null != terminalInfo)
                        {
                            foreach (PropertyInfo property in properties)
                            {
                                property.SetValue(item, property.GetValue(terminalInfo, null), null);
                            }
                        }
                    }
                    //增加新选择的教室
                    ICollection <TerminalInfo> addItems = terminalInfos.Where(p => !TerminalInfos.Select(o => o.TerminalId).Contains(p.TerminalId)).ToList();
                    foreach (var item in addItems)
                    {
                        TerminalInfos.Add(item);
                    }
                }
            }
        }