#!/usr/bin/env ruby
###########################################################################
# AWS Elastic Beanstalk Command Line Client
# Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# 
# Licensed under the Apache License, Version 2.0 (the “License”). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#    http://aws.amazon.com/apache2.0/
#
# or in the “license” file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
#

require File.join(File.dirname(__FILE__), 'setup.rb')
require 'aws/client/commandline'
 
AWS::Client::CommandLine.new do |client|
  client.service_call   = lambda { |params| @elasticbeanstalk.create_application_version(params) }
  client.result_key     = 'ApplicationVersion'
  client.empty_response = 'Application version not created.'
  
  client.option('-a', '--application-name NAME', 'Application name') do |name|
    client.service_param('ApplicationName', name)
  end

  client.option('-d', '--description DESC', 'Application description') do |desc|
    client.service_param('Description', desc)
  end
  
  client.option('-l', '--version-label LABEL', 'Version label') do |label|
    client.service_param('VersionLabel', label)
  end

 client.option('-c', '--auto-create [TRUE/FALSE]', 'Auto-create application if it does not exist. False if not specified.') do |auto_create|                                                   
    if (auto_create.nil?)
      auto_create = true
    else
      auto_create.downcase!
    end
    client.service_param('AutoCreateApplication', auto_create)                                                                                                                                  
  end

  client.option('-s', '--source-location LOCATION', 'Location of application bundle in S3 formatted as: \'bucket/file_key\'') do |source_location|
    source_parts = source_location.split('/', 2)
    
    source_bundle = {
      'S3Bucket' => source_parts[0],
      'S3Key'    => source_parts[1]
    }
    
    client.service_param('SourceBundle', source_bundle)
  end
  
  client.filter 'DateCreated'  do |val| Time.at(val) end
  client.filter 'DateUpdated'  do |val| Time.at(val) end
  client.filter 'SourceBundle' do |val| "#{val['S3Bucket']}/#{val['S3Key']}" end
end.run(ARGV)
