class Family::Legacy::Students::Classrooms::AssignmentsController < Family::Controller
  def index
    render_success :ok, json: assignments.map { |a| assignment_props(a) }
  end

  private
    def assignments
      classroom.class_assignments
        .joins(:class_grades)
        .includes(:class_subject, :class_grade_category)
        .exclude_future
        .by_status(params[:status])
        .by_subject(params[:subject_id])
        .by_quarter(params[:quarter])
        .merge(ClassGrade.by_student(student))
    end

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

    def grade_by_assignment
      @grade_by_assignment ||= student.class_grades.index_by(&:class_assignment_id)
    end

    def assignment_props(assignment)
      {
        id: assignment.id,
        name: assignment.name,
        due_date: assignment.due_date,
        class_id: assignment.class_id? ? assignment.class_id : nil,
        subject: assignment.class_subject&.name,
        subject_id: assignment.class_subject&.id,
        possible: assignment.possible,
        category: assignment.class_grade_category&.name,
        grade_status: grade_by_assignment[assignment.id].status,
        status: assignment.status,
        grade: grade_by_assignment[assignment.id].number
      }
    end
end
