# frozen_string_literal: true

class AdminAction
	class CancelCustomer
		def self.cancel_stanza
			m = Blather::Stanza::Message.new
			m.from = CONFIG[:notify_from]
			m.body = "Your JMP account has been cancelled."
			m
		end

		def self.call(customer, customer_repo:, **)
			raise "Customer not registered" unless customer.registered?

			m = cancel_stanza
			customer.stanza_to(m).then {
				EMPromise.all([
					Churnbuster.new.cancellation(customer),
					customer.stanza_to(Blather::Stanza::Iq::IBR.new(:set).tap(&:remove!)),
					customer.deregister!, customer_repo.disconnect_tel(customer)
				])
			}
		end
	end
end
