module Fog
  module Storage
    class AzureRM
      # This class provides the actual implemention for service calls.
      class Real
        def list_storage_accounts
          begin
            promise = @storage_mgmt_client.storage_accounts.list
            response = promise.value!
            body = response.body.value
            body.each do |obj|
              obj.properties.last_geo_failover_time = DateTime.parse(Time.now.to_s)
            end
            result = Azure::ARM::Storage::Models::StorageAccountListResult.serialize_object(response.body)['value']
            puts "Result: #{result}"
            result
          rescue  MsRestAzure::AzureOperationError => e
            msg = "Exception listing Storage Accounts. #{e.body['error']['message']}"
            raise msg
          end
        end
      end
      # This class provides the mock implementation for unit tests.
      class Mock
        def list_storage_accounts
          [
            {
              "id"=>"/subscriptions/{subscriptionId}/resourceGroups/mock_test_resource_group/providers/Microsoft.Storage/storageAccounts/mock_test_storage_account",
              "name"=>"mock_test_storage_account",
              "type"=>"Microsoft.Storage/storageAccounts",
              "location"=>"westus",
              "tags"=>{},
              "properties"=>
                  {
                      "provisioningState"=>"Succeeded",
                      "accountType"=>"Standard_LRS",
                      "primaryEndpoints"=>
                          {
                          "blob"=>"https://mock_test_storage_account.blob.core.windows.net/",
                          "queue"=>"https://mock_test_storage_account.queue.core.windows.net/",
                          "table"=>"https://mock_test_storage_account.table.core.windows.net/",
                          "file"=>"https://mock_test_storage_account.file.core.windows.net/"
                          },
                      "primaryLocation"=>"westus",
                      "statusOfPrimary" =>"available",
                      "lastGeoFailoverTime"=>"2016-05-19T09:49:07Z",
                      "creationTime"=>"2016-05-19T05:24:36Z"
                  }
            }
          ]
        end
      end
    end
  end
end