1# frozen_string_literal: true
2
3class CommandList
4 include Enumerable
5
6 def self.for(jid)
7 Customer.for_jid(jid).then(&:registered?).catch { nil }.then { |reg|
8 next [] unless reg
9 REDIS.get("catapult_fwd-#{reg.phone}").then { |fwd| [reg, fwd] }
10 }.then do |(reg, fwd)|
11 next RegisteredAndHasForwarding.new if reg && fwd
12 next Registered.new if reg
13 CommandList.new
14 end
15 end
16
17 def each
18 yield node: "jabber:iq:register", name: "Register"
19 end
20
21 class Registered < CommandList
22 def each
23 super
24 yield node: "number-display", name: "Display JMP Number"
25 yield node: "configure-calls", name: "Configure Calls"
26 # TODO: don't show this item if no braintree methods available
27 # TODO: don't show this item if no plan for this customer
28 yield node: "buy-credit", name: "Buy account credit"
29 yield node: "usage", name: "Show Monthly Usage"
30 yield node: "reset sip account", name: "Create or Reset SIP Account"
31 end
32 end
33
34 class RegisteredAndHasForwarding < Registered
35 def each
36 super
37 yield(
38 node: "record-voicemail-greeting",
39 name: "Record Voicemail Greeting"
40 )
41 end
42 end
43end