module Base::Classroom
  extend ActiveSupport::Concern

  included do
    self.table_name = 'Classes'
    self.primary_key = 'ClassID'

    alias_attribute :id, :ClassID
    # alias_attribute :class_connect_id, :ClassConnectID
    # alias_attribute :co_class_id, :CoClassID
    # alias_attribute :class_link, :Classlink
    alias_attribute :school_id, :SchoolID
    # alias_attribute :school_year_id, :SchoolYearID
    # alias_attribute :school_grade_scale_id, :SGSID
    # alias_attribute :force_grade_scale, :ForceGS
    # alias_attribute :grading_comments, :GradingComments
    alias_attribute :name, :Name
    alias_attribute :description, :Description
    alias_attribute :color, :Color
    # alias_attribute :email, :DisplayEmail
    # alias_attribute :resources, :Resources
    # alias_attribute :class_number, :ClassNum
    alias_attribute :department_id, :DepartmentID
    alias_attribute :section, :Section
    alias_attribute :course_number, :Course
    # alias_attribute :course_alternative, :CourseAlt
    alias_attribute :primary_teacher_id, :PrimaryStaffID
    # alias_attribute :staff_id_secondary, :SecondaryStaffID
    # alias_attribute :grading_structure, :GradingStructure
    alias_attribute :grade, :Grade
    # alias_attribute :subject, :Subject
    # alias_attribute :student_group_id, :StudentGroupID
    alias_attribute :location_id, :LocationID
    alias_attribute :facility_id, :FacilityID
    alias_attribute :homeroom, :HomeRoom
    # alias_attribute :calendar, :Calendar
    # alias_attribute :news, :News
    # alias_attribute :docs, :Docs
    alias_attribute :q1, :Q1
    alias_attribute :q2, :Q2
    alias_attribute :q3, :Q3
    alias_attribute :q4, :Q4
    alias_attribute :q5, :Q5
    alias_attribute :q6, :Q6
    alias_attribute :q7, :Q7
    alias_attribute :q8, :Q8
    alias_attribute :q9, :Q9
    alias_attribute :q10, :Q10
    alias_attribute :q11, :Q11
    alias_attribute :q12, :Q12
    alias_attribute :s1, :S1
    alias_attribute :s2, :S2
    alias_attribute :s3, :S3
    # alias_attribute :monday, :Monday
    # alias_attribute :tuesday, :Tuesday
    # alias_attribute :wednesday, :Wednesday
    # alias_attribute :thursday, :Thursday
    # alias_attribute :friday, :Friday
    # alias_attribute :saturday, :Saturday
    # alias_attribute :sunday, :Sunday
    alias_attribute :period_id, :PeriodID
    # alias_attribute :priority, :Priority
    # alias_attribute :page, :Page
    # alias_attribute :location, :Location
    # alias_attribute :duration, :Duration
    # alias_attribute :elementary, :Elementary
    # alias_attribute :photo_id, :PhotoID
    # alias_attribute :max, :Maximum
    alias_attribute :type, :Type
    # alias_attribute :public, :Public
    alias_attribute :parent_access, :ParentAccess
    alias_attribute :parent_viewable, :ParentViewable
    # alias_attribute :parent_instructional, :ParentInstructional
    # alias_attribute :internal, :Internal
    # alias_attribute :ext_id, :ExtID
    # alias_attribute :website, :WebSite
    # alias_attribute :posted, :Posted
    # alias_attribute :passfail, :PassFail
    # alias_attribute :require_id, :RequireID
    alias_attribute :credit, :Credit
    # alias_attribute :decrease, :Decrease
    # alias_attribute :weight, :Weight
    # alias_attribute :include_grade_card, :IncludeGradeCard
    # alias_attribute :include_gpa, :IncludeGPA
    # alias_attribute :include_numeric_average, :IncludeNumAvg
    # alias_attribute :includ_etranscripts, :IncludeTranscripts
    alias_attribute :full_term, :FullTerm
    alias_attribute :grade_model, :GradeModel
    # alias_attribute :calculation, :Calculation
    # alias_attribute :grade_style, :GradeStyle
    # alias_attribute :grade_style_locked, :GradeStyleLocked
    # alias_attribute :action_default, :ActionDefault
    # alias_attribute :grading_periods, :GradingPeriods
    # alias_attribute :subject_grading, :SGrading
    # alias_attribute :term_1, :Term1
    # alias_attribute :term_2, :Term2
    # alias_attribute :final, :Final
    # alias_attribute :honors, :Honors
    # alias_attribute :honor_points, :HonorPoints
    # alias_attribute :college, :College
    # alias_attribute :college_points, :CollegePoints
    alias_attribute :viewable_grades, :ViewableGrades
    # alias_attribute :class_donor_campaign_id, :ClassDCID
    # alias_attribute :parent_class_id, :ParentClassID
    # alias_attribute :gpa_scale, :GPAScale
    # alias_attribute :shoutboard, :Shoutboard
    # alias_attribute :report_card_block, :ReportCardBlock
    # alias_attribute :class_average, :ClassAvg
    # alias_attribute :class_cumulative_average, :ClassCumAvg

    before_create :set_defaults

    before_save :set_department_id

    private
      def set_department_id
        self.department_id = 0 unless department_id?
      end

      def set_defaults
        self.Name = '' unless self.Name
        self.Description = '' unless self.Description
        self.Color = '' unless self.Color
        self.DisplayEmail = 0 unless self.DisplayEmail
        self.Course = '' unless self.Course
        self.CourseAlt = '' unless self.CourseAlt
        self.Subject = 0 unless self.Subject
        self.StudentGroupID = 0 unless self.StudentGroupID
        self.Sunday = 0 unless self.Sunday
        self.Location = 0 unless self.Location
        self.Type = 0 unless self.Type
        self.IncludeNumAvg = 0 unless self.IncludeNumAvg
        self.GradingPeriods = 0 unless self.GradingPeriods
        self.ClassDCID = 0 unless self.ClassDCID
        self.Shoutboard = 0 unless self.Shoutboard
      end
  end
end
