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