#!/usr/bin/ruby 

require 'musicbrainz'

# allocate a new MusicBrainz client
mb = MusicBrainz::Client.new
mb.depth = 2

# handle environment variables
mb.server = server if server = ENV['MB_SERVER']
mb.debug = true if ENV['MB_DEBUG']
mb.depth = depth.to_i if depth = ENV['MB_DEPTH']


unless ARGV.size > 0
  $stderr.puts 'Missing query string.'
  exit -1
end

query = ARGV[0]

# search for artist
puts 'Query: ' << query
if mb.query MusicBrainz::Query::TrackInfoFromTRMId, query
  mb.select MusicBrainz::Query::Rewind

  1.upto(1000) { |i|
    # select first track from track list
    unless mb.select(MusicBrainz::Query::SelectTrack, i)
      puts 'That TRM is not in the database.' if i == 1
      break
    end

    track_uri = mb.result MusicBrainz::Query::TrackGetTrackId

    # extract the artist name from the track
    puts 'Artist: ' << artist if 
      artist = mb.result(MusicBrainz::Query::TrackGetArtistName)

    # extract the track name
    puts 'Track: ' << track if 
      track = mb.result(MusicBrainz::Query::TrackGetTrackName)

    # extract the track duration
    puts 'Duration: ' << dur  << ' ms' if 
      dur = mb.result(MusicBrainz::Query::TrackGetTrackDuration)

    mb.select MusicBrainz::Query::SelectTrackAlbum

    # extract the track number
    track_num = mb.ordinal MusicBrainz::Query::AlbumGetTrackList, track_uri
    puts 'TrackNum: ' << track_num.to_s if track_num > 0 && track_num < 100
      
    # extract the album name from the track
    puts 'Album: ' << album if
      album = mb.result(MusicBrainz::Query::AlbumGetAlbumName)
  }
else
  $stderr.puts 'Error: ' << mb.error
end

