module Sources
  module Strategies
    class Base
      attr_reader :url
      attr_reader :artist_name, :profile_url, :image_url, :tags

      def self.url_match?(url)
        false
      end

      def initialize(url)
        @url = url
      end

      # No remote calls are made until this method is called.
      def get
        raise NotImplementedError
      end

      def site_name
        raise NotImplementedError
      end

      def unique_id
        artist_name
      end

      def artist_record
        if artist_name.present?
          Artist.other_names_match(artist_name)
        else
          nil
        end
      end

      def referer_url(template)
        template.params[:ref] || template.params[:url]
      end

    protected
      def agent
        raise NotImplementedError
      end
    end
  end
end
