class Ecs::BaseController < ApplicationController

  # model validation error
  rescue_from ActiveRecord::RecordInvalid do |ex|
    render_error(ex.record.errors.full_messages.join(','))
  end
  # form validation error
  rescue_from ActiveModel::ValidationError do |ex|
    render_error(ex.model.errors.full_messages.join(','))
  end

  before_action :require_login
  before_action :check_user_permission!

  helper_method :current_user, :current_school

  private

  # --- 每个子类controller可能有不同的实现,查看时需要注意 ---
  def current_year
    @_current_year ||= EcYear.find(params[:ec_year_id])
  end

  def current_major_school
    @_current_major_school ||= current_year.ec_major_school
  end

  def current_school
    @_current_school ||= current_major_school.school
  end

  def major_or_course_manager?
    !current_user.admin? && !current_school.manager?(current_user)
  end

  def check_user_permission!
    return if current_user.admin? || current_school.manage_permission?(current_user)

    render_forbidden
  end

  def check_manager_permission!
    return if current_user.admin? || current_school.manager?(current_user)

    render_forbidden
  end

  def check_major_manager_permission!
    return if current_user.admin? || current_school.manager?(current_user)
    return if current_major_school.manager?(current_user)

    render_forbidden
  end

  def paginate(objs)
    page     = params[:page].to_i <= 0 ? 1 : params[:page].to_i
    per_page = params[:per_page].to_i > 0 ? params[:per_page].to_i : 20

    Kaminari.paginate_array(objs).page(page).per(per_page)
  end
end