1# frozen_string_literal: true
2
3class CommandList
4 include Enumerable
5
6 def self.for(jid)
7 Customer.for_jid(jid).catch { nil }.then do |customer|
8 EMPromise.resolve(customer&.registered?).catch { nil }.then do |reg|
9 next Registered.for(customer, reg.phone) if reg
10 CommandList.new
11 end
12 end
13 end
14
15 def each
16 yield node: "jabber:iq:register", name: "Register"
17 end
18
19 class Registered < CommandList
20 def self.for(customer, tel)
21 EMPromise.all([
22 REDIS.get("catapult_fwd-#{tel}"),
23 customer.plan_name ? customer.payment_methods : []
24 ]).then do |(fwd, payment_methods)|
25 Registered.new(*[
26 (HAS_CREDIT_CARD unless payment_methods.empty?),
27 (HAS_CURRENCY if customer.currency),
28 (HAS_FORWARDING if fwd)
29 ].compact)
30 end
31 end
32
33 def initialize(*args)
34 @extra = args
35 end
36
37 ALWAYS = [
38 { node: "number-display", name: "Display JMP Number" },
39 { node: "configure-calls", name: "Configure Calls" },
40 { node: "usage", name: "Show Monthly Usage" },
41 { node: "reset sip account", name: "Create or Reset SIP Account" },
42 {
43 node: "credit cards",
44 name: "Credit Card Settings and Management"
45 }
46 ].freeze
47
48 def each
49 super
50 ([ALWAYS] + @extra).each do |commands|
51 commands.each { |x| yield x }
52 end
53 end
54 end
55
56 HAS_CURRENCY = [
57 node: "alt top up",
58 name: "Buy Account Credit by Bitcoin, Mail, or Interac eTransfer"
59 ].freeze
60
61 HAS_FORWARDING = [
62 node: "record-voicemail-greeting",
63 name: "Record Voicemail Greeting"
64 ].freeze
65
66 HAS_CREDIT_CARD = [
67 node: "top up", name: "Buy Account Credit by Credit Card"
68 ].freeze
69end