#!/usr/bin/env ruby

# The ultimate awesome Nodejs packaging tool like a supernova!

require 'fileutils'
#=begin
require '/usr/share/npkg/dependency.rb'
require '/usr/share/npkg/plugins/bower.rb'
#=end
=begin
require_relative 'dependency.rb'
require_relative 'plugins/bower.rb'
=end
include Dependency
include Bower

name = ARGV[0]
bundles = {}
if ARGV[1]
	ARGV[1].split(',').each do |i|
		a = i.split(':')
		bundles[a[0]] = a[1]
	end
end

# generate dependency map, downloadable filelist, and complete license string
puts "Processing dependencies in package.json"
Dependency.write(name,bundles)

# generate source.txt

#=begin

# start from 1, 0 will the be 'phantomjs.json'
i = 1

if File.exist?(name + '.lst')
    open(name + '.source','w:UTF-8') do |f|
	open(name + '.lst','r:UTF-8') do |f1|
		f1.each_line do |l|
			url = "http://registry.npmjs.org/" + l.strip.gsub(/-[0-9].*$/,'') + "/-/" + l.strip + ".tgz"
			f.write "Source" + i.to_s + ":\t" + url + "\n"
			i += 1
		end
	end
    end
end

# delta download sources
if File.exist?(name + '.lst')
    old,new = [],[]
    Dir.glob("./**/*.tgz") do |f|
	old << f.gsub("./","").gsub(".tgz","")
    end

    open(name + '.lst','r:UTF-8') do |f|
	f.each_line do |l|
		new << l.strip!
	end
    end

    cross = old & new
    deltaold = old - cross
    deltanew = new - cross

    deltanew.each do |d|
      unless d.nil?
	url = "http://registry.npmjs.org/" + d.gsub(/-[0-9].*$/,'') + "/-/" + d + ".tgz"
	io = IO.popen("wget --tries=0 #{url}")
	io.close
      end
    end
    FileUtils.rm_rf name + '.lst'

    deltaold.each do |d|
      unless d.nil?
	puts "\033[0;32m#{d}.tgz needs to be deleted from source\033[0m"
      end
    end

end

# bower
re = /#{name}-[0-9]/
Dir.glob("*.tgz") do |f|
  md = re.match(f)
  if md
    io = IO.popen("tar -xf #{f}")
    io.close
    if File.exist? "package/bower.json"
      puts "Processing dependencies in bower.json"
      Bower.install(name)
    end
  end
end
FileUtils.rm_rf "package" if File.exist? "package"
#=end
