#!/usr/bin/env ruby

require 'smallvictories'

def help
  %Q(
  Usage: sv [COMMAND] [OPTIONS]

  Commands:
    bootstrap, bootstrap FOLDER     Setup folder with default files
    compile                         Compile files
    deploy                          Minify and copy files to deploy folder
    inline                          Inline CSS in your HTML files
    minify                          Minify files for production
    server                          Run Small Victories local HTML development server
    watch                           Watch for changes and compile files
    help                            Prints this help document
    version                         Prints the small victories gem version

  Options:
    -h, --help                      Prints this help document
    -v, --version                   Prints the small victories gem version

  See https://github.com/xxix/smallvictories-gem for additional documentation.
  )
end

def bootstrap folder=nil
  config = SmallVictories::Configuration.new
  builder = SmallVictories::Builder.new(config: config)
  builder.setup folder
  compile
end

def compile
  config = SmallVictories::Configuration.new
  compiler = SmallVictories::Compiler.new(config: config)
  compiler.compile_css
  compiler.compile_js
  compiler.compile_html
end

def deploy folder=nil
  config = SmallVictories::Configuration.new
  deployer = SmallVictories::Deployer.new(config: config)
  minify
  deployer.copy folder
end

def inline
  config = SmallVictories::Configuration.new
  compiler = SmallVictories::Compiler.new(config: config)
  compiler.compile_css
  compiler.compile_js
  compiler.compile_html
  compiler.minify_css
  compiler.minify_js
  compiler.inline_html
end

def minify
  config = SmallVictories::Configuration.new
  compiler = SmallVictories::Compiler.new(config: config)
  compiler.compile_css
  compiler.compile_js
  compiler.compile_html
  compiler.minify_css
  compiler.minify_js
end

def server
  config = SmallVictories::Configuration.new
  server = SmallVictories::Server.new(config: config)
  server.run
end

def watch
  compile
  config = SmallVictories::Configuration.new
  compiler = SmallVictories::Compiler.new(config: config)
  watcher = SmallVictories::Watcher.new(compiler: compiler)
  watcher.watch
end

case ARGV[0]
when '-v', '--version', 'version'
  puts SmallVictories::VERSION
when '-h', '--help', 'help'
  puts help
when 'bootstrap'
  bootstrap ARGV[1]
when 'compile'
  compile
when 'deploy'
  deploy ARGV[1]
when 'inline'
  inline
when 'minify'
  minify
when 'server'
  server
when 'watch'
  watch
else
  puts "`#{ARGV[0]}` command not found.\n"
  puts help
end