require 'rake/clean'

WARNING = <<-EOS.freeze
   WARNING: you may not have wget installed, you could just download
   the correct version of jruby-complete to the vendors folder, and
   re-run k9 setup install instead of installing wget. Some systems
   may also require 'sudo' access to install, NB: this is untested....

EOS


JRUBYC_VERSION     = '9.1.13.0'

EXAMPLES           = '2.4'
HOME_DIR = ENV['HOME']
MAC_OR_LINUX = /linux|mac|darwin/ =~ RbConfig::CONFIG['host_os']

CLOBBER.include("jruby-complete-#{JRUBYC_VERSION}.jar")

desc "download, and copy to jruby_art"
task :default => [:download, :copy_ruby]

desc "download JRuby upstream sources"
task :download => ["jruby-complete-#{JRUBYC_VERSION}.jar"]

file "jruby-complete-#{JRUBYC_VERSION}.jar" do
  begin
    sh "wget https://s3.amazonaws.com/jruby.org/downloads/#{JRUBYC_VERSION}/jruby-complete-#{JRUBYC_VERSION}.jar"
  rescue
    warn(WARNING)
  end
  check_sha256("jruby-complete-#{JRUBYC_VERSION}.jar", "96acc80d383e3268df6d1e4947367966729a9c130dfeb889e4e3af77e63a2433")
end

directory "../lib/ruby"

desc "copy jruby-complete"
task :copy_ruby => ["../lib/ruby"] do
  sh "cp -v jruby-complete-#{JRUBYC_VERSION}.jar ../lib/ruby/jruby-complete.jar"
end

def check_sha256(filename, expected_hash)
  require "digest"
  sha256 = Digest::SHA256.new
  File.open(filename, "r") do |f|
    while buf = f.read(4096)
      sha256.update(buf)
    end
  end
  if sha256.hexdigest != expected_hash
    raise "bad sha256 checksum for #{filename} (expected #{expected_hash} got #{sha256.hexdigest})"
  end
end

desc "download, and copy to jruby_art"
task :unpack_samples => [:download_examples, :copy_examples]

desc 'download and copy examples to user home'
task :download_examples
file_name = (MAC_OR_LINUX.nil?) ? "#{EXAMPLES}.zip" : "#{EXAMPLES}.tar.gz"
file file_name do
  begin
    if MAC_OR_LINUX.nil?
      sh "wget https://github.com/ruby-processing/JRubyArt-examples/archive/#{EXAMPLES}.zip"
    else
      sh "wget https://github.com/ruby-processing/JRubyArt-examples/archive/#{EXAMPLES}.tar.gz"
    end
  rescue
    warn(WARNING)
  end
end

desc "copy examples"
task :copy_examples => file_name do
  if MAC_OR_LINUX.nil?
    sh "unzip #{EXAMPLES}.zip"
  else
    sh "tar xzvf #{EXAMPLES}.tar.gz"
  end
  sh "rm -r #{HOME_DIR}/k9_samples" if File.exist? "#{HOME_DIR}/k9_samples"
  sh "cp -r JRubyArt-examples-#{EXAMPLES} #{HOME_DIR}/k9_samples"
  sh "rm -r JRubyArt-examples-#{EXAMPLES}"
end