using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using EMIS.ViewModel.CacheManage;


namespace EMIS.ViewModel.SelectCourse.SelectCourseResult
{
    /// <summary>
    /// 选课结果 
    /// </summary>
    public class SelectCourseResultView
    {
        /// <summary>
        /// ID
        /// </summary>
        [DisplayName("选修类型")]
        public Guid ID { get; set; }

        /// <summary>
        /// 选课编号
        /// </summary>
        [DisplayName("选课编号")]
        public string SelectionCouseNo { get; set; }

        /// <summary>
        /// 选修任务班名称
        /// </summary>
        [DisplayName("选修任务班名称")]
        public string DefaultClassName { get; set; }

        /// <summary>
        /// 学年学期ID
        /// </summary>
        [DisplayName("学年学期ID")]
        public Guid? SchoolyearID { get; set; }

        /// <summary>
        /// 学年学期
        /// </summary>
        [DisplayName("学年学期")]
        public string SchoolYearCode { get; set; }

        /// <summary>
        /// 学年(学年学期对应学年)
        /// </summary>
        [DisplayName("学年")]
        public int? YearID { get; set; }

        /// <summary>
        /// 选修类型
        /// </summary>
        [DisplayName("选修类型")]
        public int SelectCourseType { get; set; }

        /// <summary>
        /// 选修类型
        /// </summary>
        [DisplayName("选修类型")]
        public string SelectCourseTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.EM_SelectCourseType.ToString())
                    .Where(x => x.Value == SelectCourseType)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 开课教研室
        /// </summary>
        [DisplayName("开课教研室")]
        [Required]
        public Guid? DepartmentID { get; set; }

        /// <summary>
        /// 开课教研室编号
        /// </summary>
        [DisplayName("开课教研室编号")]
        public string DepartmentCode{ get; set; }

        /// <summary>
        /// 开课教研室
        /// </summary>
        [DisplayName("开课教研室")]
        public string DepartmentName { get; set; }

        /// <summary>
        /// 开课院系所
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "College")]
        public Guid? CollegeID { get; set; }

        /// <summary>
        /// 开课院系所
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "College")]
        public string CollegeName { get; set; }

        /// <summary>
        /// 课程信息ID
        /// </summary>
        public Guid? CoursematerialID { get; set; }

        /// <summary>
        /// 课程代码
        /// </summary>
        [DisplayName("课程代码")]
        public string CourseCode { get; set; }

        /// <summary>
        /// 课程名称
        /// </summary>
        [DisplayName("课程名称")]
        public string CourseName { get; set; }

        /// <summary>
        /// 课程类型
        /// </summary>
        [DisplayName("课程类型")]
        public int? CourseTypeID { get; set; }

        /// <summary>
        /// 课程类型
        /// </summary>
        [DisplayName("课程类型")]
        public string CourseTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseType.ToString())
                    .Where(x => x.Value == CourseTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程结构
        /// </summary>
        //[Required]
        [DisplayName("课程结构")]
        public int? CourseStructureID { get; set; }

        /// <summary>
        /// 课程结构
        /// </summary>
        [DisplayName("课程结构")]
        public string CourseStructureName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseStructure.ToString())
                    .Where(x => x.Value == CourseStructureID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程属性
        /// </summary>
        //[Required]
        [DisplayName("课程属性")]
        public int? CourseCategoryID { get; set; }

        /// <summary>
        /// 课程属性
        /// </summary>
        [DisplayName("课程属性")]
        public string CourseCategoryName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseCategory.ToString())
                    .Where(x => x.Value == CourseCategoryID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程性质
        /// </summary>
        [DisplayName("课程性质")]
        public int? CourseQualityID { get; set; }

        /// <summary>
        /// 课程性质
        /// </summary>
        [DisplayName("课程性质")]
        public string CourseQualityName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseQuality.ToString())
                    .Where(x => x.Value == CourseQualityID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 学分
        /// </summary>
        [DisplayName("学分")]
        public decimal? Credit { get; set; }

        /// <summary>
        /// 理论学时
        /// </summary>
        [DisplayName("理论学时")]
        public int? TheoryCourse { get; set; }

        /// <summary>
        /// 实践学时
        /// </summary>
        [DisplayName("实践学时")]
        public int? Practicehours { get; set; }

        /// <summary>
        /// 实验学时
        /// </summary>
        [DisplayName("实验学时")]
        public int? Trialhours { get; set; }

        /// <summary>
        /// 总学时
        /// </summary>
        [DisplayName("总学时")]
        public int? Totalhours
        {
            get
            {
                if (TheoryCourse == null)
                    TheoryCourse = 0;
                if (Practicehours == null)
                    Practicehours = 0;
                return (TheoryCourse + Practicehours);
                //return this.TheoryCourse ?? 0 + this.Practicehours ?? 0 + this.Trialhours ?? 0; }
            }
        }

        /// <summary>
        /// 上课周数
        /// </summary>
        [DisplayName("上课周数")]
        public int? SchoolweeksNum
        {
            get
            {
                return (TheoryWeeklyNum ?? 0) + (PracticeWeeklyNum ?? 0) + (TrialWeeklyNum ?? 0);
            }
        }

        /// <summary>
        /// 每周次数
        /// </summary>
        [DisplayName("每周次数")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? WeeklyNum { get; set; }

        /// <summary>
        /// 理论周次
        /// </summary>
        [DisplayName("理论周次")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? TheoryWeeklyNum { get; set; }

        /// <summary>
        /// 实践周次
        /// </summary>
        [DisplayName("实践周次")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? PracticeWeeklyNum { get; set; }

        /// <summary>
        /// 实验周次
        /// </summary>
        [DisplayName("实验周次")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? TrialWeeklyNum { get; set; }

        /// <summary>
        /// 周学时
        /// </summary>
        [DisplayName("周学时")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输入数字")]//^[1-9]\d*|0$
        public int? WeeklyHours { get; set; }

        /// <summary>
        /// 开始周次
        /// </summary>
        [DisplayName("开始周次")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? StartWeeklyNum { get; set; }

        /// <summary>
        /// 结束周次
        /// </summary>
        [DisplayName("结束周次")]
        //[RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? EndWeeklyNum { get; set; }

        /// <summary>
        /// 起止周次
        /// </summary>
        [DisplayName("起止周次")]
        public string StartEndWeeklyNum
        {
            get
            {
                if (StartWeeklyNum != null && EndWeeklyNum != null)
                    return StartWeeklyNum + "-" + EndWeeklyNum;
                else
                    return "";
            }
        }

        /// <summary>
        /// 授课方式
        /// </summary>
        [DisplayName("授课方式")]
        public int? TeachingModeID { get; set; }

        /// <summary>
        /// 授课方式
        /// </summary>
        [DisplayName("授课方式")]
        public string TeachingModeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_TeachingMode.ToString())
                    .Where(x => x.Value == TeachingModeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 实践类型
        /// </summary>
        [DisplayName("实践类型")]
        public int? PracticeTypeID { get; set; }

        // <summary>
        /// 实践类型
        /// </summary>
        [DisplayName("实践类型")]
        public string PracticeTypeNameStr { get; set; }

        /// <summary>
        /// 实践类型
        /// </summary>
        [DisplayName("实践类型")]
        public string PracticeTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.EM_PracticeType.ToString())
                    .Where(x => x.Value == PracticeTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 考试方式
        /// </summary>
        [DisplayName("考试方式")]
        public int? ExaminationModeID { get; set; }

        /// <summary>
        /// 考试方式
        /// </summary>
        [DisplayName("考试方式")]
        public string ExaminationModeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_ExaminationMode.ToString())
                    .Where(x => x.Value == CourseTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 授课语言
        /// </summary>
        [DisplayName("授课语言")]
        public int? TeachinglanguageID { get; set; }

        /// <summary>
        /// 授课语言
        /// </summary>
        [DisplayName("授课语言")]
        public string TeachinglanguageName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Teachinglanguage.ToString())
                    .Where(x => x.Value == TeachinglanguageID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 开课学年
        /// </summary>
        [DisplayName("开课学年")]
        public int? SchoolyearNumID { get; set; }

        /// <summary>
        /// 开课学年
        /// </summary>
        [DisplayName("开课学年")]
        public string SchoolyearNumName { get; set; }

        /// <summary>
        /// 学期
        /// </summary>
        [DisplayName("学期")]
        public int? SchoolcodeID { get; set; }

        /// <summary>
        /// 学期
        /// </summary>
        [DisplayName("学期")]
        public string SchoolcodeName { get; set; }

        /// <summary>
        /// 开课学期
        /// </summary>
        [DisplayName("开课学期")]
        public int? StarttermID { get; set; }

        /// <summary>
        /// 开课学期
        /// </summary>
        [DisplayName("开课学期")]
        public string StarttermName { get; set; }

        /// <summary>
        /// 处理方式
        /// </summary>
        [DisplayName("处理方式")]
        public int? HandleModeID { get; set; }

        /// <summary>
        /// 处理方式
        /// </summary>
        [DisplayName("处理方式")]
        public string HandleModeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_HandleMode.ToString())
                    .Where(x => x.Value == HandleModeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 是否需要教材
        /// </summary>
        [DisplayName("是否需要教材")]
        public bool IsNeedMaterial { get; set; }

        /// <summary>
        /// 是否需要教材
        /// </summary>
        [DisplayName("是否需要教材")]
        public string IsNeedMaterialName { get; set; }

        /// <summary>
        /// 人数下限
        /// </summary>
        [DisplayName("人数下限")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? PeopleNumlower { get; set; }

        /// <summary>
        /// 人数上限
        /// </summary>
        [DisplayName("人数上限")]
        [RegularExpression(@"^[0-9]+([.]{1}[0-9]+){0,1}$", ErrorMessage = "请输入数字")]
        public int? PeopleNumlimit { get; set; }

        /// <summary>
        /// 排课明细
        /// </summary>
        [DisplayName("排课明细")]
        public string Scheduling { get; set; }

        /// <summary>
        /// 星期
        /// </summary>
        [DisplayName("星期")]
        public int? Weekday { get; set; }

        /// <summary>
        /// 星期
        /// </summary>
        [DisplayName("星期")]
        public string WeekdayName { get; set; }

        /// <summary>
        /// 节次
        /// </summary>
        [DisplayName("节次")]
        public Guid? CoursesTimeID { get; set; }

        /// <summary>
        /// 节次
        /// </summary>
        [DisplayName("节次")]
        public string CoursesTimeName { get; set; }
        
        /// <summary>
        /// 教室ID
        /// </summary>
        [DisplayName("教室ID")]
        public Guid? ClassroomID { get; set; }

        /// <summary>
        /// 教室
        /// </summary>
        [DisplayName("教室")]
        public string ClassroomName { get; set; }

        /// <summary>
        /// 上课时间
        /// </summary>
        [DisplayName("上课时间")]
        public string WeekdayTimesSegmentName { get; set; }

        /// <summary>
        /// 任课教师
        /// </summary>
        [DisplayName("任课教师")]
        public Guid? TeacherUserID { get; set; }

        /// <summary>
        /// 教职工号
        /// </summary>
        [DisplayName("教职工号")]
        public string TeacherUserCode { get; set; }

        /// <summary>
        /// 任课教师
        /// </summary>
        [DisplayName("任课教师")]
        public string TeacherName { get; set; }

        /// <summary>
        /// 已选人数
        /// </summary>
        [DisplayName("已选人数")]
        public int? StudentTotalNum { get; set; }

        /// <summary>
        /// 开放状态
        /// </summary>
        [DisplayName("开放状态")]
        public bool IsOpened { get; set; }

        /// <summary>
        /// 开放状态
        /// </summary>
        public string IsOpenedDesc
        {
            get { return this.IsOpened == true ? "是" : "否"; }
        }

        /// <summary>
        /// 状态
        /// </summary>
        public int? RecordStatus { get; set; }

        /// <summary>
        /// 审核状态
        /// </summary>
        [DisplayName("状态")]
        public string RecordStatusName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.EM_SelectCourseResultStatus.ToString())
                    .Where(x => x.Value == RecordStatus)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 状态
        /// </summary>
        [DisplayName("状态")]
        public string RecordStatusCode
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.EM_SelectCourseResultStatus.ToString())
                    .Where(x => x.Value == RecordStatus)
                    .Select(x => x.Code).FirstOrDefault();
            }
        }
    }
}