# coding: utf-8
#
# Author:: Alessio Rocchi (<alessio.rocchi@staff.aruba.it>)
# © Copyright ArubaCloud.
#
# LICENSE: MIT (http://opensource.org/licenses/MIT)
#

require 'fog/arubacloud/service'

module Fog
  module ArubaCloud
    class Compute
      class Real
        # Create a new VM: Smart.
        # @param [String] name name of the server
        # @param [String] admin_password server administrative password
        # @param [String] template_id id of template to use
        # @param [Int] size
        # * 1 => small
        # * 2 => medium
        # * 3 => large
        # * 4 => extra-large
        # @param [String] note Metadata for VM
        # @return [Excon::Response]

        def create_vm_smart(data)
          idPackage = self.get_package_id( data[:package_id] )
          body = self.body('SetEnqueueServerCreation').merge(
              {
                  :Server => {
                      :AdministratorPassword => data[:admin_passwd],
                      :Name => data[:name],
                      :SmartVMWarePackageID => idPackage || 1  ,
                      :Note => data[:note] || 'Created by Fog Cloud.',
                      :OSTemplateId => data[:template_id]
                  }
              }
          )

          response = nil
          time = Benchmark.realtime {
            response = request( body, 'SetEnqueueServerCreation', "Smart_vm creation error"  )
          }
          Fog::Logger.debug("SetEnqueueServerCreation time: #{time}")
          if response['Success']
            response
          else
            raise Fog::ArubaCloud::Errors::RequestError.new("Error during the VM creation. Object: \n#{body}", response=response)
          end
        end
      end

      class Mock
        def create_vm_smart(data)
          response = Excon::Response.new
          response.status = 201
          response.body = {
              'ExceptionInfo' => nil,
              'ResultCode' => 0,
              'ResultMessage' => nil,
              'Success' => true
          }
          response.body
        end # create_vm_smart
      end # Mock

    end # Compute
  end # ArubaCloud
end # Fog