class EdFi::Descriptor < ApplicationRecord
  include Base::EdFi::Descriptor

  scope :by_descriptor, ->(school, descriptor) do
    return unless school

    academic_year = school.current_year&.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: descriptor
    )
  end

  scope :by_grade_levels, ->(school) do
    return unless school

    academic_year = school.current_year&.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year || Time.current.year,
      descriptor: 'gradeLevel'
    )
  end

  scope :by_calendar_type_descriptor, ->(school) do
    return unless school

    academic_year = school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'calendarTypeDescriptor'
    )
  end

  scope :by_calendar_event_descriptor, ->(school) do
    return unless school

    academic_year = school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'calendarEventDescriptor'
    )
  end

  scope :by_exit_withdrawl_descriptor, ->(school, academic_year=nil) do
    return unless school

    academic_year ||= school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'exitWithdrawType'
    )
  end

  scope :by_language_descriptor, ->(school) do
    return unless school

    academic_year = school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'language'
    )
  end

  scope :by_race_descriptor, ->(school) do
    return unless school

    academic_year = school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'race'
    )
  end

  scope :by_attendance_event_category_descriptor, ->(school) do
    return unless school

    academic_year = school.current_year.academic_year
    where(
      state: School.ed_fi_systems[school.ed_fi_system],
      academic_year: academic_year,
      descriptor: 'attendanceEventCategoryDescriptor'
    )
  end
end
