# frozen_string_literal: true

module CustomerOGM
	def self.for(url, fetch_vcard_temp)
		return Media.new(url) if url

		TTS.for(fetch_vcard_temp)
	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(fetch_vcard_temp)
			fetch_vcard_temp.call.then { |vcard|
				new(vcard)
			}.catch { new(Blather::Stanza::Iq::Vcard::Vcard.new) }
		end

		def initialize(vcard)
			@vcard = vcard
		end

		def [](k)
			value = @vcard[k]
			return if value.to_s.empty?

			value
		end

		def fn
			self["FN"] || self["NICKNAME"] || "a user of JMP.chat"
		end

		def to_render
			[:voicemail_ogm_tts, { locals: { fn: fn } }]
		end
	end
end
