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

  def index
    ec_courses = current_year.ec_courses

    @count = ec_courses.count

    @ec_courses = paginate ec_courses.includes(:course_managers)

    course_ids = @ec_courses.map(&:id)
    # 课程目标数
    @target_count_map             = EcCourseTarget.where(ec_course_id: course_ids).group(:ec_course_id).count
    # 考核方式数
    @evaluation_count_map         = EcCourseEvaluation.where(ec_course_id: course_ids).group(:ec_course_id).count
    # 评价方法数
    @achievement_method_count_map = EcCourseAchievementMethod.where(ec_course_id: course_ids).group(:ec_course_id).count
    # 毕业目标数
    @graduation_subitem_count_map = EcGraduationSubitemCourseTarget.joins(:ec_course_target)
                                      .where(ec_course_targets: { ec_course_id: course_ids })
                                      .group('ec_course_targets.ec_course_id')
                                      .count('distinct ec_graduation_subitem_id')
    # 已达成毕业目标数
    @completed_subitem_count_map = EcCourseSupport.joins(:ec_graduation_requirement_calculation)
                                     .where(ec_course_id: course_ids)
                                     .where(ec_graduation_requirement_calculations: { status: 1 })
                                     .group('ec_course_supports.ec_course_id')
                                     .count('distinct ec_graduation_subitem_id')
  end

  def search
    ec_courses = current_year.ec_courses

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

    @count      = ec_courses.count
    @ec_courses = paginate ec_courses
  end

  def create
    create_params = params.permit(:name)
    @ec_course = Ecs::CreateCourseService.call(current_year, create_params)
  rescue Ecs::CreateCourseService::Error => ex
    render_error(ex.message)
  end

  def destroy
    current_course.destroy!
    render_ok
  end

  def import
    success_count = Ecs::ImportCourseService.call(current_year, params[:attachment_id])
    render_ok(success_count: success_count)
  rescue Ecs::ImportCourseService::Error => ex
    render_error(ex.message)
  end

  def link_course
    link_params = params.permit(:course_id)
    Ecs::LinkCourseService.call(current_course, link_params)
    render_ok
  rescue Ecs::LinkCourseService::Error => ex
    render_error(ex.message)
  end

  private

  def current_course
    @_current_course ||= current_year.ec_courses.find(params[:id])
  end
end