#!/usr/bin/env ruby

require 'json'

def puts_c(color, str)
	puts "\x1b[#{color}m#{str}\x1b[0m"
end

# for tracking if bump was needed
$bumped = false
def did_bump
	if !$bumped
		puts "bump detected!"
		if `which uglifyjs`.empty?
			puts_c 31, "you need uglifyjs installed"
			puts "run `sudo npm install -g uglify-js`"
			exit 1
		end
	end
	$bumped = true
end



# get package.json version
pckg_path = 'package.json'
package = JSON.parse File.read pckg_path
v = package['version']



# check/bump version in `mustache.js` file

mjs_path = 'mustache.js'
mjs = File.read mjs_path
mjs_re = /mustache.version = "([\d\.]*)"/

if match = mjs.match(mjs_re)
	mjs_v = match.captures[0]
	if v != mjs_v then
		did_bump
		puts "> bumping version in file 'mustache.js': #{mjs_v} -> #{v}..."
		mjs.gsub! mjs_re, "mustache.version = \"#{v}\""
		File.open(mjs_path, 'w') {|f| f.write(mjs) }
	end
else
	puts_c 31, "ERROR: Can't find 'mustache.version = \"x.x.x\"' in mustache.js"
	exit 1
end



# check/bump version in `mustache.js.nuspec` file

nspc_path = 'mustache.js.nuspec'
nspc = File.read nspc_path
nspc_re = /<version>([\d\.]*)<\/version>/
if match = nspc.match(nspc_re)
	nspc_v = match.captures[0]
	if v != nspc_v then
		did_bump
		puts "> bumping version in file 'mustache.js.nuspec': #{nspc_v} -> #{v}..."
		nspc.gsub! nspc_re, "<version>#{v}</version>"
		File.open(nspc_path, 'w') {|f| f.write(nspc) }
	end
else
	puts_c 31, "ERROR: Can't find '<version>x.x.x</version>' in mustache.js.nuspec"
	exit 1
end


# check/bump version in `bower.json` file

bwr_path = 'bower.json'
bwr = File.read bwr_path
bwr_re = /"version": "([\d\.]*)"/

if match = bwr.match(bwr_re)
	bwr_v = match.captures[0]
	if v != bwr_v
		did_bump
		puts "> bumping version in file 'bower.json': #{bwr_v} -> #{v}..."
		bwr.gsub! bwr_re, "\"version\": \"#{v}\""
		File.open(bwr_path, 'w') {|f| f.write(bwr) }
	end
else
	puts_c 31, "ERROR: Can't find '\"version\": \"x.x.x\"' in 'bower.json'"
	exit 1
end



# if bumped, do extra stuff and notify the user

if $bumped

	# minify `mustache.js` using the Rakefile task
	puts "> minifying `mustache.js`..."
	`rake minify`

	# stage files for commit
	`git add #{pckg_path}`
	`git add #{mjs_path}`
	`git add #{nspc_path}`
	`git add #{bwr_path}`
	`git add mustache.min.js`
	`git commit -m "bump to version #{v}"`

	# notify codemonkey
	puts "staged bumped files and created commit"
	puts_c 32, "successfully bumped version to #{v}!"
	puts_c 33, "don't forget to `npm publish` and `spm publish`!"
	exit 1

end
exit 0