using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EMIS.DataLogic.Repositories;
using EMIS.ViewModel.SelectCourse;
using System.Linq.Expressions;
using EMIS.Entities;
using EMIS.ViewModel;

namespace EMIS.DataLogic.SelectCourse
{
    public class OpenControlSettingDAL
    {
        public SelectCourseOpenControlSettingRepository SelectCourseOpenControlSettingRepository { get; set; }
        public SchoolyearRepository SchoolyearRepository { get; set; }
        public GrademajorRepository GrademajorRepository { get; set; }
        public DictionaryItemRepository DictionaryItemRepository { get; set; }
        public FreeSelectionCourseGradeYearSettingRepository FreeSelectionCourseGradeYearSettingRepository { get; set; }

        public IQueryable<SelectCourseOpenControlSettingView> GetOpenControlSettingView(
            Expression<Func<EM_SelectCourseOpenControlSetting, bool>> openControlSettingExp,
            Expression<Func<EMIS.Entities.CF_Schoolyear, bool>> schoolYearExp,
            Expression<Func<CF_Grademajor, bool>> gradeMajorExp)
        {
            var q = (from scocs in SelectCourseOpenControlSettingRepository.GetList(openControlSettingExp)
                     join sy in SchoolyearRepository.GetList(schoolYearExp) on scocs.SchoolyearID equals sy.SchoolyearID
                     join gm in GrademajorRepository.GetList(gradeMajorExp) on scocs.GrademajorID equals gm.GrademajorID
                     join dis in DictionaryItemRepository.GetList(x => x.DictionaryCode == typeof(CF_Standard).Name) on gm.CF_Facultymajor.StandardID equals dis.Value into ddis
                     from edis in ddis.DefaultIfEmpty()
                     join disy in DictionaryItemRepository.GetList(x => x.DictionaryCode == typeof(EMIS.ViewModel.CF_Year).Name) on gm.GradeID equals disy.Value into ddisy
                     from edisy in ddisy.DefaultIfEmpty()
                     select new SelectCourseOpenControlSettingView
                     {
                         SelectCourseOpenControlSettingID = scocs.SelectCourseOpenControlSettingID,
                         SchoolyearID = scocs.SchoolyearID,
                         SchoolyearCode = sy.Code,
                         GrademajorID = scocs.GrademajorID,
                         GrademajorName = gm.Name,
                         GrademajorCode=gm.Code,
                         YearID = gm.GradeID,
                         YearName = edisy.Name,
                         StandardID = gm.CF_Facultymajor.StandardID,
                         StandardDesc = edis.Name,
                         LearnSystem = gm.CF_Facultymajor.LearnSystem,
                         EducationID = gm.CF_Facultymajor.EducationID,
                         LearningformID = gm.CF_Facultymajor.LearningformID,
                         CollegeID = gm.CF_Facultymajor.CollegeID,
                         CollegeName = gm.CF_Facultymajor.CF_College.Name,
                         StartTime = scocs.StartTime,
                         EndTime = scocs.EndTime,
                         MaxSelectCount = scocs.MaxSelectCount,
                         MinSelectCount = scocs.MinSelectCount,
                         MaxCredit = scocs.MaxCredit,
                         MinCredit = scocs.MinCredit,
                         Remark = scocs.Remark,
                         RecordStatus = scocs.RecordStatus,
                         CreateUserID = scocs.CreateUserID,
                         CreateTime = scocs.CreateTime,
                         ModifyUserID = scocs.ModifyUserID,
                         ModifyTime = scocs.ModifyTime
                     });

            return q;
        }

        public IQueryable<FreeSelectionCouseControlView> GetFreeSelectionCouseControlView(
            Expression<Func<EM_FreeSelectionCourseGradeYearSetting, bool>> openControlSettingExp)
        {
            var q = (from fr in FreeSelectionCourseGradeYearSettingRepository.GetList(openControlSettingExp)
                     join sy in SchoolyearRepository.Entities on fr.SchoolyearID equals sy.SchoolyearID
                     select new FreeSelectionCouseControlView
                     {
                         FreeSelectionCourseGradeYearSettingID = fr.FreeSelectionCourseGradeYearSettingID,
                         SchoolyearID = fr.SchoolyearID,
                         SchoolyearCode = sy.Code,
                         GradeYear = fr.GradeYear, 
                         StartTime = fr.StartTime,
                         EndTime = fr.EndTime,
                         MaxSelectCount = fr.MaxSelectCount??0,
                         MinSelectCount = fr.MinSelectCount??0,
                         MaxCredit = fr.MaxCredit??0,
                         MinCredit = fr.MinCredit??0,
                         Remark = fr.Remark,
                     });

            return q;
        }
    }
}