require 'open-uri'

module Oneboxer

  class BaseOnebox

    class << self
      attr_accessor :regexp
      attr_accessor :favicon_file

      def matcher(regexp=nil,&blk)
        self.regexp = regexp || blk
      end

      def favicon(favicon_file)
        self.favicon_file = "favicons/#{favicon_file}"
      end

      def remove_whitespace(s)
        s.gsub /\n/, ''
      end

      def image_html(url, title, page_url)
        "<a href='#{page_url}' target='_blank'><img src='#{url}' alt='#{title}'></a>"
      end

      def replace_tags_with_spaces(s)
        s.gsub /<[^>]+>/, ' '
      end

      def uriencode(val)
        URI.escape(val, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
      end

      # Replace any occurence of a HTTP or HTTPS URL in the string with the protocol-agnostic variant
      def replace_agnostic(var)
        var.gsub! /https?:\/\//, '//' if var.is_a? String
      end

      # Add wmode=opaque to the iframe src URL so that the flash player is rendered within the document flow instead of on top
      def append_embed_wmode(var)
        var.gsub! /(src="[^"]+)/, '\1&wmode=opaque"' if var.is_a? String
      end

    end

    def initialize(url, opts={})
      @url = url
      @opts = opts
    end

    def translate_url
      @url
    end

    def nice_host
      host = URI.parse(@url).host
      host.nil? ? '' : host.gsub('www.', '')
    rescue URI::InvalidURIError
      '' # In case there is a problem with the URL, we just won't set the host
    end
  end
end