#!/usr/bin/ruby

$modules = [:core,
            :emnlp2013,
            :acl2014,
            :geofreebase_vdb,
            :geofreebase_ttl,
            :fullfreebase_vdb,
            :fullfreebase_ttl]

def usage
  puts "Usage: ./download-dependencies <#{$modules.join('|')}>"
end

if ARGV.size == 0
  usage
  exit 1
end

def run(command)
  puts "RUNNING: #{command}"
  if not system(command)
    puts "FAILED: #{command}"
    exit 1
  end
end

def download(release, path, baseUrl='http://nlp.stanford.edu/software/sempre')
  url = baseUrl + '/release-' + release.to_s
  isDirectory = (path.end_with?('.exec') or path.end_with?('vdb') or 
                 path.end_with?('free917') or path.end_with?('inexact') or path.end_with?('prolog'))  # Superficial test for directory
  if release != :code and !path.end_with?('.gz', '.tgz', '.jar')
    path += '.tar' if isDirectory
    path += '.bz2'
  end
  run("mkdir -p #{File.dirname(path)}")
  run("wget -c '#{url}/#{path}' -O #{path}")
  if release != :code and path.end_with?('.bz2')
    if isDirectory
      run("cd #{File.dirname(path)} && tar xjf #{File.basename(path)}")
    else
      run("bzip2 -fd #{path}")
    end
  end
end

def downloadFromFileList(release)
  files = []
  File.foreach('release-' + release.to_s + '.files') { |line|
    file = line.sub(/#.*$/, '').sub(/^\s*/, '').sub(/\s*$/, '')
    next if file.size == 0
    files << file
  }
  files.each { |path|
    download(release, path)
  }
end

def main(which)
  if not $modules.include?(which)
    usage
    exit 1
  end
  downloadFromFileList(which)
end

ARGV.each { |mod|
  mod = mod.to_sym
  main(mod)
}
