class Admins::DepartmentAppliesController < Admins::BaseController

  before_action :get_apply,only:[:agree,:edit,:update,:destroy]
  def index
    params[:status] ||= 0
    params[:sort_by] = params[:sort_by].presence || 'created_at'
    params[:sort_direction] = params[:sort_direction].presence || 'desc'
    applies = Admins::DepartmentApplyQuery.call(params)
    @depart_applies = paginate applies.preload(:school,user: :user_extension)
  end

  def agree
    ActiveRecord::Base.transaction do
      @depart_apply.update_attribute("status",1)
      @depart_apply&.applied_messages&.update_all(status:1)
      @depart_apply&.department&.update_attribute("is_auth",1)
      @depart_apply&.user&.user_extension&.update_attribute("department_id",@depart_apply.department_id)
      render_success_js
    end
  end

  def update
    depart_name = params[:name]
    ActiveRecord::Base.transaction do
      @depart_apply.update_attribute("name",depart_name)
      @depart_apply&.department&.update_attribute("name",depart_name)
      extra = depart_name + "(#{@depart_apply&.department&.school&.try(:name)})"
      tiding_params = {
        user_id: @depart_apply.user_id,
        trigger_user_id: 0,
        container_id: @depart_apply.id,
        container_type: 'ApplyAddDepartment',
        belong_container_id: @depart_apply.department.school_id,
        belong_container_type: "School",
        tiding_type: "System",
        status: 3,
        extra: extra
      }
      Tiding.create(tiding_params)
      render_success_js
    end
  end

  def destroy
    ActiveRecord::Base.transaction do
      @depart_apply.update_attribute("status",3)
      @depart_apply&.applied_messages&.update_all(status:3)
      @depart_apply&.department&.destroy
      @depart_apply&.user&.user_extension&.update_attribute("department_id", nil)
      tiding_params = {
        user_id: @depart_apply.user_id,
        trigger_user_id: 0,
        container_id: @depart_apply.id,
        container_type: 'ApplyAddDepartment',
        belong_container_id: @depart_apply.department.school_id,
        belong_container_type: "School",
        tiding_type: "System",
        status: 2,
        extra: params[:reason]
      }
      Tiding.create(tiding_params)
      render_success_js
    end
  end

  private

  def get_apply
    @depart_apply = ApplyAddDepartment.find_by(id:params[:id])
  end
end