class Family::Legacy::ParentTeacherUsersController < Family::Controller
  def index
    render_success :ok, json: parent_teacher_users.map { |ptuser| user_props(ptuser) }
  end

  private
    def parent_teacher_config
      current_school.find_or_build_parent_teacher_config
    end

    def homeroom_classrooms
      @homeroom_classrooms ||= current_school.classrooms
        .where(homeroom: true)
        .pluck(:primary_teacher_id)
        .flatten
        .uniq
    end

    def current_family_student_ids
      @current_family_student_ids ||= current_family.students.pluck(:id)
    end

    def student_teacher_ids
      current_family.classrooms.joins(:primary_teacher).pluck(:primary_teacher_id).uniq
    end

    def student_teachers_display
      @student_teachers_display ||= current_family.classrooms
        .where(ClassStudents: { StudentID: current_family_student_ids })
        .preload(:students)
        .joins(:primary_teacher)
        .by_homeroom(parent_teacher_config.homeroom_only?)
        .map do |classroom|
          [
            classroom.id,
            classroom.students.select { |s| current_family_student_ids.include?(s.id) }.pluck(:id)
          ]
        end
        .to_h
    end

    def parent_teacher_users
      @parent_teacher_users ||= current_school.parent_teacher_users
        .preload(user: :classrooms)
        .joins(:user)
        .where(user_id: student_teacher_ids)
        .order('Users.LastName')
    end

    def user_props(ptuser)
      user = ptuser.user
      ids = []
      user.classrooms.each do |classroom|
        ids << student_teachers_display[classroom.id]
      end
      {
        id: ptuser.user_id,
        name: user.full_name,
        display: ids.flatten.uniq
      }
    end
end
