module Fog
  module Terremark
    module Shared
      module Real

        # Get details of an organization
        #
        # ==== Parameters
        # * organization_id<~Integer> - Id of organization to lookup
        #
        # ==== Returns
        # * response<~Excon::Response>:
        #   * body<~Hash>:
        #     * 'description'<~String> - Description of organization
        #     * 'links'<~Array> - An array of links to entities in the organization
        #       * 'href'<~String> - location of link
        #       * 'name'<~String> - name of link
        #       * 'rel'<~String> - action to perform
        #       * 'type'<~String> - type of link
        #     * 'name'<~String> - Name of organization
        def get_organization(organization_id)
          response = request(
            :expects  => 200,
            :method   => 'GET',
            :parser   => Fog::Parsers::Terremark::Shared::GetOrganization.new,
            :path     => "org/#{organization_id}"
          )
          response
        end

      end

      module Mock

        def get_organization(organization_id)
          organization_id = organization_id.to_i
          response = Excon::Response.new

          if org = self.data[:organizations].detect { |org| org[:info][:id] == organization_id }

            body = { "name" => org[:info][:name],
                     "href" => "#{@base_url}/org/#{org[:info][:id]}",
                     "Links" => [] }

            body["Links"] = case self
            when Fog::Terremark::Vcloud::Mock
              _vdc_links(org[:vdcs][0])
            when Fog::Terremark::Ecloud::Mock
              org[:vdcs].map do |vdc|
                _vdc_links(vdc)
              end.flatten
            end

            response.status = 200
            response.body = body
            response.headers = Fog::Terremark::Shared::Mock.headers(response.body, "application/vnd.vmware.vcloud.org+xml")
          else
            response.status = Fog::Terremark::Shared::Mock.unathorized_status
            response.headers = Fog::Terremark::Shared::Mock.error_headers
          end

          response
        end

        private

        def _vdc_links(vdc)
          [{ "name" => vdc[:name],
             "href" => "#{@base_url}/vdc/#{vdc[:id]}",
             "rel" => "down",
             "type" => "application/vnd.vmware.vcloud.vdc+xml" },
           { "name" => "#{vdc[:name]} Catalog",
             "href" => "#{@base_url}/vdc/#{vdc[:id]}/catalog",
             "rel" => "down",
             "type" => "application/vnd.vmware.vcloud.catalog+xml" },
           { "name" => "#{vdc[:name]} Tasks List",
             "href" => "#{@base_url}/vdc/#{vdc[:id]}/taskslist",
             "rel" => "down",
             "type" => "application/vnd.vmware.vcloud.tasksList+xml" }
          ]
        end
      end

    end
  end
end
