1# frozen_string_literal: true
2
3module CustomerOGM
4 def self.for(url, fetch_vcard_temp)
5 return Media.new(url) if url
6
7 TTS.for(fetch_vcard_temp)
8 end
9
10 class Media
11 def initialize(url)
12 @url = url
13 end
14
15 def to_render
16 [:voicemail_ogm_media, { locals: { url: @url } }]
17 end
18 end
19
20 class TTS
21 def self.for(fetch_vcard_temp)
22 fetch_vcard_temp.call.then { |vcard|
23 new(vcard)
24 }.catch { new(Blather::Stanza::Iq::Vcard::Vcard.new) }
25 end
26
27 def initialize(vcard)
28 @vcard = vcard
29 end
30
31 def [](k)
32 value = @vcard[k]
33 return if value.to_s.empty?
34
35 value
36 end
37
38 def fn
39 self["FN"] || self["NICKNAME"] || "a user of JMP.chat"
40 end
41
42 def to_render
43 [:voicemail_ogm_tts, { locals: { fn: fn } }]
44 end
45 end
46end