class Admission::Applicants::EnrollmentClassService < ApplicationService
  def initialize(applicant)
    @applicant = applicant
  end

  def config_props
    {
      school_year_id: config.school_year_id,
      enroll_type: config.enroll_type,
      classes: config.classes?
    }
  end

  def props
    classrooms.map do |classroom|
      {
        id: classroom.id,
        department: classroom.department&.name,
        name: classroom.name,
        description: classroom.description
      }
    end
  end

  def student_class_ids
    @student_class_ids ||= student_classes.pluck(:class_id)
  end

  def complete?
    config.scheduler? || !config.classes || @applicant.student.nil? || student_class_ids.present?
  end

  private
    def application
      @application ||= @applicant.application
    end

    def config
      @config ||= application.school.find_or_build_enrollment_config
    end

    def school_year
      application.school_year
    end

    def classrooms
      application.school.classrooms.joins(:class_enrollment).ordered
    end

    def student_classes
      return [] if @applicant.student.nil?

      @applicant.student.class_student_enrollments.where(school_year: school_year)
    end
end
