class Admins::ProfessionalAuths::AgreeApplyService < ApplicationService
  attr_reader :apply, :user

  def initialize(apply)
    @apply = apply
    @user  = apply.user
  end

  def call
    ActiveRecord::Base.transaction do
      apply.update!(status: 1)
      user.update!(professional_certification: true)

      RewardGradeService.call(user, container_id: user.id, container_type: 'Professional', score: 500)

      deal_tiding!
      delete_auth_file!
    end
  end

  private

  def deal_tiding!
    apply.tidings.where(tiding_type: 'Apply').update_all(status: 1)

    Tiding.create!(user_id: apply.user_id, trigger_user_id: 0,
                   container_id: apply.id, container_type: 'ApplyUserAuthentication',
                   belong_container_id: apply.user_id, belong_container_type: 'User',
                   status: 1, tiding_type: 'System')
  end

  def delete_auth_file!
    path = Util::FileManage.disk_professional_auth_filename(user.id)
    File.delete(path) if File.exists?(path)

    apply.update!(is_delete: true)
  end
end