module Support
  class TwilioClient
    class << self
      def read_sms_code(phone_number:)
        code = ""
        wait_for_sms(phone_number: phone_number)
        @messages = twilio_client.messages.list(
          to: phone_number
        )
        @messages.each do |message|
          # SMS code is in 6 digit format, using regex to extract it
          code = message.body.scan(/\b\d{6}\b/)
          break
        end
        code
      end

      def delete_all(phone_number:)
        @messages = twilio_client.messages.list(
          to: phone_number
        )
        @messages.each do |message|
          message.delete
        end
      end

      def wait_for_sms(phone_number:)
        puts "Waiting for sms..."
        Watir::Wait.until do
          !twilio_client.messages.list(to: phone_number).empty?
        end
      end

      private

      def twilio_client
        @twilio_client ||= Twilio::REST::Client.new ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_AUTH_TOKEN"]
      end
    end
  end
end
