class Admin::Course::Courses::ClassroomsController < Admin::Course::Controller
  def index
    data = course.classrooms.includes(:primary_teacher).ordered
    render_success :ok, json: data.map { |c| classroom_props(c) }
  end

  def attach
    new_classrooms = classrooms.not_attached_to_a_course(true).pluck(:id)
    if course.update(classroom_ids: new_classrooms + course.classroom_ids)
      attached = course.classrooms.map { |c| classroom_props(c) }
      render_success :ok, message: 'Classrooms attached.', json: attached
    else
      render_error :unprocessable_entity, errors: course
    end
  end

  def detach
    if course.update(classroom_ids: course.classroom_ids - classrooms.pluck(:id))
      render_success :ok, message: 'Classrooms removed.'
    else
      render_error :unprocessable_entity, errors: course
    end
  end

  private
    def course
      @course ||= current_school.courses.find_by(id: params[:course_id])
    end

    def classrooms
      current_school.classrooms.where(id: params[:classroom_ids])
    end

    def classroom_props(classroom)
      {
        id: classroom.id,
        name: classroom.name,
        section: classroom.section,
        primary_teacher: classroom.primary_teacher&.full_name(:reverse),
        type: classroom.type
      }
    end
end
