class Ecs::EcYearsController < Ecs::BaseController
  before_action :check_major_manager_permission!, only: [:create, :destroy]

  def index
    ec_years = current_major_school.ec_years

    search = params[:search].to_s.strip
    if search.present?
      ec_years = ec_years.where('year LIKE ?', "%#{search}%")
    end

    @count    = ec_years.count
    @ec_years = paginate ec_years

    return if @ec_years.blank?

    # 防止N+1，手动查询数量
    year_ids = @ec_years.pluck(:id)
    @student_count_map = EcYearStudent.where(ec_year_id: year_ids).group(:ec_year_id).count
    @training_subitem_count_map = EcTrainingSubitem.joins(:ec_training_objective)
                                    .where(ec_training_objectives: { ec_year_id: year_ids }).group('ec_year_id').count
    @graduation_requirement_count_map = EcGraduationRequirement.where(ec_year_id: year_ids).group(:ec_year_id).count
    @course_count_map = EcCourse.where(ec_year_id: year_ids).group(:ec_year_id).count
    @course_target_count_map = EcCourseTarget.joins(:ec_course).where(ec_courses: { ec_year_id: year_ids })
                                 .group('ec_year_id').count
    @graduation_subitem_count_map = EcGraduationSubitem.joins(:ec_graduation_requirement)
                                      .where(ec_graduation_requirements: { ec_year_id: year_ids }).group('ec_year_id').count
  end

  def create
    if current_major_school.ec_years.exists?(year: params[:year].to_i)
      render_error('届别已存在')
      return
    end

    @ec_year = CopyEcYearService.call(current_major_school, params[:year].to_i)
  end

  def destroy
    current_year.destroy!
    render_ok
  end

  private

  def current_year
    @_current_year ||= current_major_school.ec_years.find(params[:id])
  end

  def current_major_school
    @_ec_major_school ||= EcMajorSchool.find(params[:ec_major_school_id])
  end

  def current_school
    @_current_school ||= current_major_school.school
  end
end