#!/usr/bin/env ruby

require "open3"

DEFAULT_DIR = "/pegasus/pub/music/artists"

def process_mp3(mp3_path)
  mp3_path = File.expand_path(mp3_path)
  dirname = File.dirname(mp3_path)
  current_info, stderr, status = Open3.capture3("id3info", mp3_path)
  current_info.force_encoding("ASCII-8BIT")
  #if current_info =~ /TIT2\s.*: (.*)/
  #  title = $1
  #else
    title = File.basename(mp3_path).sub(/\.mp3$/, "")
  #end
  artist = File.basename(File.dirname(File.dirname(mp3_path)))
  album = File.basename(File.dirname(mp3_path))
  if current_info =~ /TYER\s.*: (.*)/
    year = $1
  end
  if File.basename(mp3_path) =~ /^(\d+)/
    track_number = $1.to_i
  end
  arts = Dir.glob("#{File.dirname(mp3_path)}/*.jpg")
  if arts.size >= 1
    album_art = arts.first
  end
  args = []
  args += %W[--artist=#{artist}]
  args += %W[--album=#{album}]
  args += %W[--title=#{title}]
  args += %W[--track=#{track_number}] if track_number
  args += %W[--release-year=#{year}] if year
  # 2017 Outback likes to show picture for OTHER but not FRONT_COVER...
  #args += %W[--add-image=#{album_art}:OTHER] if album_art
  args += [mp3_path]
  system("eyeD3", "--remove-all", mp3_path)
  system("eyeD3", *args)
end

def main
  args = ARGV.dup

  dir = args[0] || DEFAULT_DIR

  mp3_paths = Dir.glob("#{dir}/**/*.mp3")
  mp3_paths.each do |mp3_path|
    process_mp3(mp3_path)
  end
end

main
