#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-

#Copyright (c) 2011 Xavier Nayrac
#
#Permission is hereby granted, free of charge, to any person obtaining
#a copy of this software and associated documentation files (the
#"Software"), to deal in the Software without restriction, including
#without limitation the rights to use, copy, modify, merge, publish,
#distribute, sublicense, and/or sell copies of the Software, and to
#permit persons to whom the Software is furnished to do so, subject to
#the following conditions:
#
#The above copyright notice and this permission notice shall be included
#in all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
#MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
#IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
#CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
#TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
#SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
$GENIT_PATH = File.expand_path(File.dirname(__FILE__)) + '/..'

require 'genit'
require 'clamp'
include Genit

module Genit

  class AbstractCommand < Clamp::Command
    option ['-v', '--version'], :flag, "print version" do
      puts "genit #{File.read(File.join($GENIT_PATH, 'VERSION')).strip}"
      exit 0
    end
  end

  # Command to create a project.
  class CreateCommand < AbstractCommand
  
    parameter "NAME", "the name of the project",
              :attribute_name => :project_name
    option ["-e", "--empty"], :flag, "Do not produce smoke test",
           :default => false

    def execute
      project = ProjectCreator.new project_name, empty?
      project.create
    end
  end

  # Command to compile a project.
  class CompileCommand < AbstractCommand
    def execute
      compiler = Compiler.new Dir.getwd
      compiler.compile
    end
  end

  # Command to start the web server.
  class ServerCommand < AbstractCommand
    def execute
      Server.new(Dir.getwd).start
    end
  end

  class MainCommand < AbstractCommand
    subcommand "create", "Create a project.", CreateCommand
    subcommand "compile", "Compile the web site.", CompileCommand
    subcommand "cc", "Compile the web site.", CompileCommand
    subcommand "server", "Run WEBrick.", ServerCommand
  end

end

Genit::MainCommand.run