module Fog
  module Compute
    class AzureRM
      # This class provides the actual implemention for service calls.
      class Real
        def get_virtual_machine(resource_group, name)
          begin
            promise = @compute_mgmt_client.virtual_machines.get(resource_group, name)
            response = promise.value!
            Azure::ARM::Compute::Models::VirtualMachine.serialize_object(response.body)
          rescue MsRestAzure::AzureOperationError => e
            msg = "Exception getting Virtual Machine #{name} from Resource Group '#{resource_group}'. #{e.body['error']['message']}"
            raise msg
          end
        end
      end
      # This class provides the mock implementation for unit tests.
      class Mock
        def get_virtual_machine(resource_group, name)
          {
            'location' => 'westus',
            'id' => "/subscriptions/########-####-####-####-############/resourceGroups/#{resource_group}/providers/Microsoft.Compute/virtualMachines/#{name}",
            'name' => name,
            'type' => 'Microsoft.Compute/virtualMachines',
            'properties' =>
            {
              'hardwareProfile' =>
                {
                  'vmSize' => 'Basic_A0'
                },
              'storageProfile' =>
                {
                  'imageReference' =>
                    {
                      'publisher' => 'Canonical',
                      'offer' => 'UbuntuServer',
                      'sku' => '14.04.2-LTS',
                      'version' => 'latest'
                    },
                  'osDisk' =>
                    {
                      'name' => "#{name}_os_disk",
                      'vhd' =>
                        {
                          'uri' => 'http://fogtestsafirst.blob.core.windows.net/vhds/testVM_os_disk.vhd'
                        },
                      'createOption' => 'FromImage',
                      'osType' => 'Linux',
                      'caching' => 'ReadWrite'
                    },
                  'dataDisks' => []
                },
              'osProfile' =>
                {
                  'computerName' => name,
                  'adminUsername' => 'testfog',
                  'linuxConfiguration' =>
                    {
                      'disablePasswordAuthentication' => false
                    },
                  'secrets' => []
                },
              'networkProfile' =>
                {
                  'networkInterfaces' =>
                    [
                      {
                        'id' => "/subscriptions/########-####-####-####-############/resourceGroups/#{resource_group}/providers/Microsoft.Network/networkInterfaces/testNIC"
                      }
                    ]
                },
              'provisioningState' => 'Succeeded'
            }
          }
        end
      end
    end
  end
end