#!/usr/bin/env ruby
require 'ditto_code'
require 'rainbow'
require 'rainbow/ext/string'

# ===============================================================
# FUNCTIONS
# ===============================================================

def usage(s)
    $stderr.puts("Ditto say -> [Err] " + s)
    $stderr.puts("Ditto say -> [Usage] #{File.basename($0)}: [-v <verbose>] [-f <folder>] [-r <recursive>] [-o <override files>] [--allow-views <search in views>] [-i <indent>] ENVIRONMENT file|folder")
    exit(1)
end

def showhelp

	$stdout.puts("Usage: [options] ENVIRONMENT file|folder")
	$stdout.puts("DittoCode")

end

def showHi

	$stdout.puts "Ditto say -> Hey man! What's up?".color("ee82ee")
	$stdout.puts("")
	$stdout.puts "  /~\\_.-~-._,--.._".color("ee82ee")
    $stdout.puts " |                ~-.._   ".color("ee82ee")
    $stdout.puts "  |     .     .        \\".color("ee82ee")
    $stdout.puts "  |                    /  ".color("ee82ee")
    $stdout.puts "  |     --....,       | \\ ".color("ee82ee")
    $stdout.puts "  /                      \\".color("ee82ee")
    $stdout.puts " |                        |".color("ee82ee")
    $stdout.puts " |                        \\".color("ee82ee")
    $stdout.puts " /                         |".color("ee82ee")
    $stdout.puts " \\_.-._  __...___.._______/".color("ee82ee")
    $stdout.puts "       ~~".color("ee82ee")

end

# Check if the filepath is a file or a directory
def isFile?(filepath)
	if File.file?(filepath)
		true
	else
		false 
	end
end

# Check if the filepath is a directory
def isDirectory?(filepath)
	if File.directory?(filepath)
		true
	else
		false 
	end
end

def iterateFolder(folder) 
	# Is folder?
	Dir.foreach("#{folder}") do |rb_file|
  		# Jump on . and .. 
  		next if rb_file == '.' or rb_file == '..' or rb_file == './'

  		filepath = "#{folder}#{rb_file}"

  		if isFile?(filepath) 

  			if rb_file.end_with?('.rb')
  				@ditto.transformation(filepath, false)
  			elsif rb_file.end_with?('.erb') && @allow_views
  				@ditto.transformation(filepath, true)
  			end
  			
  		elsif isDirectory?(filepath) && @recursive
  			# Recursive
  			iterateFolder("#{filepath}/")
  		end
  		
	end
end

# ===============================================================
# VARIABLES
# ===============================================================

$isFolder = false;
$folder = "";
$environment = "";
$verbose = false;
$override = false;
@recursive = false
@allow_views = false
$indent = false
@stop = false

# ===============================================================
# INITIATION
# ===============================================================

while ARGV[0]
	case ARGV[0]
	    when '-f' 
	    	ARGV.shift 
	    	$isFolder = true
	    when '-v' 
	    	ARGV.shift 
	    	$verbose = true
	    when '-o' 
	    	ARGV.shift
	    	$override = true
	    when '-r' 
	    	ARGV.shift
	    	@recursive = true
	    when '-i' 
	    	ARGV.shift
	    	$indent = true
	    when '--allow-views' 
	    	ARGV.shift
	    	@allow_views = true
	    when '--help' 
	    when '-h'
	    	showHelp
	    	@stop = true
	    	ARGV.shift	
	    when '-hi'
	    	showHi
	    	@stop = true
	    	ARGV.shift
	    when /^-/ 
	    	usage("Unknown option: #{ARGV[0].inspect}"); 
	    else 
	    	
	    	if $environment.empty?
	    		$environment = ARGV.shift;
	    	else
	    		$folder = ARGV.shift;
	    	end

	end
end

# ===============================================================
# EXECUTION
# ===============================================================


unless @stop

	# Initiate the global var for the parser
	ENV["DITTOCODE_ENV"] = $environment

	# Initiate ditto
	@ditto = DittoCode::Parse.new($override, $verbose, $indent)

	# Check if the user has introduce a folder/file
	if $folder.empty?

		usage("There aren't any folder/file")

	else

		# Check if is a folder
		if $isFolder
			# Check /
			unless $folder.end_with?("/") then $folder = $folder + "/" end
			# Iterate inside the folder
			iterateFolder($folder)
		else
			# Only a file
			if $folder.end_with?('.rb')
	  			@ditto.transformation($folder, false)
	  		elsif $folder.end_with?('.erb') && @allow_views
	  			@ditto.transformation($folder, true)
	  		end
		end

	end

end