# frozen_string_literal: true
class CommandList
include Enumerable
def self.for(jid)
Customer.for_jid(jid).catch { nil }.then do |customer|
EMPromise.resolve(customer&.registered?).catch { nil }.then do |reg|
next Registered.for(customer, reg.phone) if reg
CommandList.new
end
end
end
def each
yield node: "jabber:iq:register", name: "Register"
end
class Registered < CommandList
def self.for(customer, tel)
EMPromise.all([
REDIS.get("catapult_fwd-#{tel}"),
customer.plan_name ? customer.payment_methods : []
]).then do |(fwd, payment_methods)|
Registered.new(*[
(HAS_CREDIT_CARD unless payment_methods.empty?),
(HAS_FORWARDING if fwd)
].compact)
end
end
def initialize(*args)
@extra = args
end
ALWAYS = [
{ node: "number-display", name: "Display JMP Number" },
{ node: "configure-calls", name: "Configure Calls" },
{ node: "usage", name: "Show Monthly Usage" },
{ node: "reset sip account", name: "Create or Reset SIP Account" },
{
node: "credit cards",
name: "Credit Card Settings and Management"
}
].freeze
def each
super
([ALWAYS] + @extra).each do |commands|
commands.each { |x| yield x }
end
end
end
HAS_FORWARDING = [
node: "record-voicemail-greeting",
name: "Record Voicemail Greeting"
].freeze
HAS_CREDIT_CARD = [
node: "top up", name: "Buy Account Credit by Credit Card"
].freeze
end