require 'optparse'

namespace :cassie do

namespace :migration do
  desc "Generates an empty migration file prefixed with the next semantic version number"
   task :create do
    include Cassie::Tasks::IO

    opts = {}
    OptionParser.new do |args|
      args.on("-b", "--build", "Bump build version number") do
        opts[:bump_type] = :build
      end
      args.on("-p", "--patch", "Bump patch version number") do
        opts[:bump_type] = :patch
      end
      args.on("-m", "--minor", "Bump minor version number") do
        opts[:bump_type] = :minor
      end
      args.on("-M", "--major", "Bump major version number") do
        opts[:bump_type] = :major
      end
      args.on("-v", "--version VERSION", "Explicitly set version") do |v|
        opts[:version] = v
      end
    end.parse!(argv)

    begin
      raise("A migration description is required.\n\nUsage:\n  cassie migration:create simple description") if argv.empty?
      name = argv.join(" ")

      version = Cassie::Schema::Version.new(opts[:version]) if opts[:version]
      version ||= Cassie::Schema.next_version(opts[:bump_type])
      version.description = name
      puts("-- Creating migration file for version #{version.number}")

      writer = Cassie::Schema::VersionWriter.new(version)
      writer.write
      rel_path = writer.filename.sub(Dir.pwd, "")
      puts "   > #{green('created')} #{rel_path}"
      puts "-- done"
    rescue => e
      output_error(e)
      abort
    end
  end
end

end