class Family::Legacy::Students::ClassroomsController < Family::Controller
  def index
    data = classrooms
      .by_parent_viewable(true)
      .by_quarter(current_school, params[:quarter])
      .ordered
      .distinct

    render_success :ok, json: data.map { |c| classroom_props(c) }
  end

  def show
    render_success :ok, json: classroom_props(classroom)
  end

  private
    def classrooms
      student.classrooms
    end

    def classroom
      @classroom ||= classrooms.find_by(id: params[:id])
    end

    def classroom_props(classroom)
      {
        id: classroom.id,
        name: classroom.name,
        parent_viewable: classroom.parent_viewable?,
        viewable_grades: classroom.viewable_grades?,
        section: classroom.section,
        teacher: classroom.primary_teacher&.full_name(:reverse),
        quarters: classroom.decorate.quarters,
        grades: if current_user.family.account_holds.empty?
                  grades_by_classroom[classroom.id]&.map { |g| grade_props(g) }
        end
      }
    end

    def grades_by_classroom
      @grades_by_classroom ||= student.class_grade_postings
        .includes(:subject)
        .by_quarter(params[:quarter])
        .with_viewable_grades
        .group_by(&:class_id)
    end

    def grade_props(grade)
      {
        id: grade.id,
        quarter: grade.quarter,
        number: grade.number,
        letter: grade.letter_grade,
        subject: grade.subject&.name,
        subject_id: grade.subject_id? ? grade.subject_id : nil,
        class_id: grade.class_id? ? grade.class_id : nil
      }
    end
end
