1# frozen_string_literal: true
2
3require_relative "bwmsgsv2_repo"
4require_relative "customer_repo"
5require_relative "proxied_jid"
6
7class CustomerInfoForm
8 def initialize(customer_repo=CustomerRepo.new(sgx_repo: Bwmsgsv2Repo.new))
9 @customer_repo = customer_repo
10 end
11
12 def find_customer(response)
13 parse_something(response.form.field("q").value)
14 end
15
16 class NoCustomer
17 def form
18 FormTemplate.render("no_customer_info")
19 end
20
21 def admin_info
22 self
23 end
24
25 def registered?
26 false
27 end
28 end
29
30 def parse_something(value)
31 EMPromise.all([
32 find_customer_one(value),
33 find_customer_one(Blather::JID.new(value)),
34 find_customer_one(ProxiedJID.proxy(value)),
35 find_customer_by_phone(value),
36 EMPromise.resolve(NoCustomer.new)
37 ]).then { |approaches| approaches.compact.first }
38 end
39
40 def find_customer_one(q)
41 @customer_repo.find_by_format(q).catch { nil }
42 end
43
44 def find_customer_by_phone(value)
45 value
46 .gsub(/\D/, "")
47 .match(/\A1?(\d{10})\Z/)
48 &.[](1)
49 &.then { |tn| find_customer_one("+1#{tn}") }
50 end
51end