module Base::Student
  extend ActiveSupport::Concern

  included do
    self.table_name = 'Students'
    self.primary_key = 'StudentID'

    alias_attribute :id, :StudentID
    alias_attribute :school_id, :SchoolID
    alias_attribute :family_id, :FamilyID
    alias_attribute :family_id_2, :Family2ID
    alias_attribute :user_id, :UserID
    alias_attribute :first_name, :FirstName
    alias_attribute :last_name, :LastName
    alias_attribute :middle_name, :MiddleName
    alias_attribute :suffix, :Suffix
    alias_attribute :date_of_birth, :DOB
    alias_attribute :grade, :Grade
    alias_attribute :type, :Type
    alias_attribute :ftn, :FTN
    alias_attribute :graduation_year, :GradYear
    alias_attribute :graduation_month, :GradMonth
    alias_attribute :graduation_day, :GradDay
    alias_attribute :graduated, :Graduated
    alias_attribute :district, :District
    # alias_attribute :school_code, :SchoolCode
    alias_attribute :homeroom_teacher_id, :TeacherID
    # alias_attribute :counselor_id, :CounselorID
    alias_attribute :nick_name, :NickName
    alias_attribute :gender, :Gender
    alias_attribute :ethnicity, :Ethnicity
    alias_attribute :language_id, :LanguageID
    alias_attribute :family_code, :FamilyCode
    # alias_attribute :social_security_number, :SSN
    alias_attribute :current, :Current
    alias_attribute :code, :StudentCode
    alias_attribute :photo, :PictureFile
    alias_attribute :email, :Email
    alias_attribute :url, :URL
    alias_attribute :cell_phone, :Cell
    alias_attribute :work_phone, :Work
    alias_attribute :sms, :SMS
    alias_attribute :external_id, :ExtID
    alias_attribute :state_id, :StateID
    # alias_attribute :daycare_price_plan_id, :DCPPID
    alias_attribute :lunch_price_plan_id, :LPPID
    alias_attribute :breakfast_price_plan_id, :BPPID
    alias_attribute :lunch_period, :LunchPeriod
    alias_attribute :location_id, :LocationID
    # alias_attribute :locker_num, :LockerNum
    # alias_attribute :combo_num, :ComboNum
    alias_attribute :gpa, :GPA
    # alias_attribute :numeric_avg, :NumericAvg
    alias_attribute :ranked, :Ranked
    alias_attribute :ranking, :Ranking
    # alias_attribute :out_of, :OutOf
    alias_attribute :alert_comments, :AlertComments

    # CRUD CLASS ALIASES
    alias_attribute :schid, :SchoolID
    alias_attribute :fid, :FamilyID
    alias_attribute :fid2, :Family2ID
    alias_attribute :uid, :UserID
    alias_attribute :fname, :FirstName
    alias_attribute :lname, :LastName
    alias_attribute :mname, :MiddleName
    alias_attribute :suffix, :Suffix
    alias_attribute :dob, :DOB
    alias_attribute :gradyear, :GradYear
    alias_attribute :gradmonth, :GradMonth
    alias_attribute :gradday, :GradDay
    alias_attribute :schoolcode, :SchoolCode
    alias_attribute :teacherid, :TeacherID
    alias_attribute :counselorid, :CounselorID
    alias_attribute :languageid, :LanguageID
    alias_attribute :familycode, :FamilyCode
    alias_attribute :picturefile, :PictureFile
    alias_attribute :cellphone, :Cell
    alias_attribute :cell, :Cell
    alias_attribute :workphone, :Work
    alias_attribute :work, :Work
    alias_attribute :extid, :ExtID
    alias_attribute :stateid, :StateID
    alias_attribute :dcppid, :DCPPID
    alias_attribute :lppid, :LPPID
    alias_attribute :bppid, :BPPID
    alias_attribute :lunchperiod, :LunchPeriod
    alias_attribute :locationid, :LocationID
    alias_attribute :lockernum, :LockerNum
    alias_attribute :combonum, :ComboNum
    alias_attribute :numericavg, :NumericAvg
    alias_attribute :outof, :OutOf
    alias_attribute :alertcomments, :AlertComments

    after_initialize :set_price_plan_defaults, if: :new_record?

    before_create :set_defaults
    before_save :set_defaults

    def legacy_class_name
      'Student'
    end

    private
      def set_price_plan_defaults
        self.lunch_price_plan_id = nil if lunch_price_plan_id&.zero?
        self.breakfast_price_plan_id = nil if breakfast_price_plan_id&.zero?
      end

      def set_defaults
        self.family_code = family.code if family_code.blank?
        self.ethnicity = :unspecified unless self.ethnicity?
        self.GradMonth = 0 unless self.GradMonth
        self.GradYear = 0 unless self.GradYear
        self.GradDay = 0 unless self.GradDay
        self.LanguageID = 0 unless self.LanguageID
      end
  end
end
