module SpotifyToMp3
  class App
    def initialize(track_id_resolver, grooveshark)
      @track_id_resolver = track_id_resolver
      @grooveshark = grooveshark
    end

    def run
      file = ARGV.first or raise "No songs file specified. Usage: #{$0} file"
      FileTrackIds.new(file).each do |track_id|
        begin
          puts "Resolving \"#{track_id}\" ".blue
          track = @track_id_resolver.resolve(track_id)

          puts "Searching \"#{track}\" on Grooveshark ".blue
          grooveshark_track = @grooveshark.get_track(track.grooveshark_query)

          puts "Downloading \"#{grooveshark_track}\" ".blue
          if File.exists? grooveshark_track.filename
            FileUtils.touch grooveshark_track.filename # To know about songs no longer in download list
            puts "Already exists, skipping".green
          else
            @grooveshark.download(grooveshark_track)
            puts "Done".green
          end
        rescue Exception => exception # For some reason without the "Exception" it is ignored
          puts exception.message.red
          # Continue with the next track
        end
      end
    rescue
      puts "#{$!}".red
    end
  end
end