# frozen_string_literal: true
module CustomerOGM
def self.for(url, tel, fetch_vcard)
return Media.new(url) if url
TTS.for(tel, fetch_vcard)
end
class Media
def initialize(url)
@url = url
end
def to_render
[:voicemail_ogm_media, { locals: { url: @url } }]
end
end
class TTS
def self.for(tel, fetch_vcard)
fetch_vcard.call.then { |vcard|
new(tel, vcard.first.payload_node)
}.catch { new(tel, Nokogiri::XML::Document.new) }
end
def initialize(tel, vcard)
@tel = tel
@vcard = vcard
end
def [](k)
value = @vcard.find_first(
"./ns:#{k.downcase}/ns:text",
ns: "urn:ietf:params:xml:ns:vcard-4.0"
)
return if !value || value.content.empty?
value.content
end
def fn
self["FN"] || self["NICKNAME"] || formatted_tel
end
def formatted_tel
@tel.sub(/\A\+?1?(\d{3})(\d{3})/, "(\\1) \\2-")
end
def to_render
[:voicemail_ogm_tts, { locals: { fn: fn } }]
end
end
end