# frozen_string_literal: true require_relative "bwmsgsv2_repo" require_relative "customer_repo" require_relative "proxied_jid" class CustomerInfoForm def initialize(customer_repo=CustomerRepo.new(sgx_repo: Bwmsgsv2Repo.new)) @customer_repo = customer_repo end def find_customer(response) parse_something(response.form.field("q").value) end class NoCustomer def form FormTemplate.render("no_customer_info") end def admin_info self end end def parse_something(value) EMPromise.all([ find_customer_one(value), find_customer_one(Blather::JID.new(value)), find_customer_one(ProxiedJID.proxy(value)), find_customer_by_phone(value), EMPromise.resolve(NoCustomer.new) ]).then { |approaches| approaches.compact.first } end def find_customer_one(q) @customer_repo.find_by_format(q).catch { nil } end def find_customer_by_phone(value) value .gsub(/\D/, "") .match(/\A1?(\d{10})\Z/) &.[](1) &.then { find_customer_one("+1#{_1}") } end end