module Fog
  module Parsers
    module Terremark
      class GetVdc < Base
        def reset
          @in_storage_capacity = false
          @in_cpu = false
          @in_memory = false
          @in_instantiated_vms_quota = false
          @in_deployed_vms_quota = false
          @response = {
            "links" => [],
            "AvailableNetworks" => [],
            "ComputeCapacity"   => {
              "Cpu" => {},
              "DeployedVmsQuota" => {},
              "InstantiatedVmsQuota" => {},
              "Memory" => {}
            },
            "StorageCapacity"  => {},
            "ResourceEntities" => []
          }
        end

        def start_element(name, attributes)
          super
          case name
          when "Cpu"
            @in_cpu = true
          when "DeployedVmsQuota"
            @in_deployed_vms_quota = true
          when "InstantiatedVmsQuota"
            @in_instantiated_vms_quota = true
          when "Link"
            link = extract_attributes(attributes)
            @response["links"] << link
          when "Memory"
            @in_memory = true
          when "Network"
            network = extract_attributes(attributes)
            @response["AvailableNetworks"] << network
          when "ResourceEntity"
            resource_entity = extract_attributes(attributes)
            @response["ResourceEntities"] << resource_entity
          when "StorageCapacity"
            @in_storage_capacity = true
          when "Vdc"
            vdc = extract_attributes(attributes)
            @response["href"] = vdc["href"]
            @response["name"] = vdc["name"]
          end
        end

        def end_element(name)
          case name
          when "Allocated", "Limit", "Units", "Used"
            if @in_cpu
              @response["ComputeCapacity"]["Cpu"][name] = value
            elsif @in_deployed_vms_quota
              @response["ComputeCapacity"]["DeployedVmsQuota"][name] = value
            elsif @in_instantiated_vms_quota
              @response["ComputeCapacity"]["InstantiatedVmsQuota"][name] = value
            elsif @in_memory
              @response["ComputeCapacity"]["Memory"][name] = value
            elsif @in_storage_capacity
              @response["StorageCapacity"][name] = value
            end
          when "Cpu"
            @in_cpu = false
          when "DeployedVmsQuota"
            @in_deployed_vms_quota = false
          when "InstantiatedVmsQuota"
            @in_instantiated_vms_quota = false
          when "Memory"
            @in_memory = false
          when "StorageCapacity"
            @in_storage_capacity = false
          when "Type"
            @response[name] = value
          end
        end
      end
    end
  end
end
