# frozen_string_literal: true

class Rantly
	module Data
		module Extensions
			# @note https://stackoverflow.com/questions/6478875/regular-expression-matching-e-164-formatted-phone-numbers
			# @return [String]
			def nanpa_phone
				"+1" +
					sized(1) { string(/[2-9]/) } +
					sized(2) { string(/[0-9]/) } +
					sized(1) { string(/[2-9]/) } +
					sized(6) { string(/[0-9]/) }
			end

			# @note https://stackoverflow.com/questions/4894198/how-to-generate-a-random-date-in-ruby
			# @return [String]
			def iso8601(from = 0.0, to = Time.now)
				value { Time.at(from + float * (to.to_f - from.to_f)).iso8601 }
			end

			# @return [String]
			def bare_jid
				local = sized(range(3, 12)) { string(:alnum) }
				domain = sized(range(3, 8)) { string(:lower) }
				"#{local}@#{domain}.example.com"
			end

			# @return [String]
			def bw_message_id
				sized(range(6, 19)) { string(:alnum) }
			end

			# @return [String]
			def shortcode
				range(10000, 999999).to_s
			end

			# @return [String]
			def media_url
				user_id = sized(range(3, 10)) { string(:alnum) }
				name = sized(range(3, 12)) { string(:alnum) }
				ext = choose(".jpg", ".png", ".gif", ".mp4", ".pdf", ".smil", ".txt", ".xml")
				"https://messaging.bandwidth.com/api/v2/users/#{user_id}/media/#{name}#{ext}"
			end
		end
	end

	include Data::Extensions
end
