<!--
  Copyright 2026 The Go Authors. All rights reserved.
  Use of this source code is governed by a BSD-style
  license that can be found in the LICENSE file.
-->

{{define "main"}}
  <style>
    .Api-list {
      list-style: none;
      padding: 0;
    }
    .Api-item {
      border-bottom: var(--border);
      display: flex;
      flex-direction: column;
      gap: 0.5rem;
      margin-bottom: 2rem;
      padding-bottom: 1rem;
    }
    .Api-item:last-child {
      border-bottom: none;
    }
    .Api-route {
      font-size: 1.25rem;
      font-weight: 600;
    }
    .Api-details {
      display: grid;
      gap: 0.5rem;
      grid-template-columns: 6rem 1fr;
    }
    .Api-label {
      font-weight: 600;
    }
    .Api-paramsTable {
      border-collapse: collapse;
      margin-top: 1.5rem;
      width: 100%;
    }
    .Api-paramsTable th {
      text-align: left;
      padding: 0.25rem 0.5rem;
      font-weight: 600;
    }
    .Api-paramsTable th:first-child {
      padding-left: 0;
    }
    .Api-paramsTable td {
      border-top: var(--border);
      vertical-align: top;
    }
    .Api-paramsTable td:first-child {
      padding-left: 0;
    }
  </style>
  <main class="go-Container" id="main-content">
    <div class="go-Content">
      <h1 data-test-id="api-heading">API Documentation</h1>
      <p>
        Pkgsite provides a JSON API for accessing information about
        Go packages and modules.
      </p>

      <h2>Requests</h2>
      <p>
      All requests are GET requests whose first URL segment selects the request
      type.
      Except for <code>search</code>, the remaining segments
      specify a module or package path. Additional arguments
      are specified as query parameters.
      </p>
      <p>
      Package paths are ambiguous: the same path <code>a/b/c</code> could be package
      <code>c</code> in module <code>a/b</code>
      or package <code>b/c</code> in module <code>a</code>.
      If both exist, the API returns an error with a list of possible modules in its
      <code>candidates</code> field.
      Make a follow-up request with the <code>module</code> query parameter to
      disambiguate. (Note: this behavior differs from the pkgsite UI, which selects
      the longest matching module path.)
      </p>
      <p>Some routes accept an optional <code>version</code> query parameter.
      If missing, the latest version is chosen.</p>

      <p>Some routes accept optional <code>GOOS</code> and <code>GOARCH</code>
      query parameters to select the desired build context of the documentation.
      If omitted, the default documentation build context is selected,
      typically <code>linux/amd64</code>.
      </p>

      <p>Some routes accept a <code>filter</code>, which selects only
      the items whose fields contain the filter as a substring. The
      documentation for each route specifies the filter behavior.
      </p>

      <h2>Responses</h2>
      <p>
        All routes return a JSON response.
        You can find a link to the corresponding Go type for a route in the documentation below.
        Errors are also returned as a JSON object, whose <code>message</code> field
        contains the error message.
      </p>
      <h2>Routes</h2>
      <ul class="Api-list">
        {{range .Routes}}
          <li class="Api-item">
            <div class="Api-route"><code>{{.Route}}</code></div>
            <p>{{.Desc}}</p>
            <div class="Api-details">
              {{if .QueryParams}}
                <span class="Api-label">Parameters:</span>
                <span>
                    <table class="Api-paramsTable">
                      <thead>
                        <tr>
                          <th>Name</th>
                          <th>Type</th>
                          <th>Description</th>
                        </tr>
                      </thead>
                      <tbody>
                          {{range .QueryParams}}
                            <tr>
                              <td><code>{{.Name}}</code></td>
                              <td><code>{{.Type}}</code></td>
                              <td>{{.Doc}}</td>
                            </tr>
                          {{end}}
                      </tbody>
                    </table>
                </span>
              {{end}} {{/* if .QueryParams */}}
              <span class="Api-label">Response:</span>
              <span><code>
                {{if .ResponsePaginatedType}}
                  <a href="https://pkg.go.dev/golang.org/x/pkgsite/internal/api#PaginatedResponse">PaginatedResponse</a>[{{if .LinkPaginatedType}}<a href="https://pkg.go.dev/golang.org/x/pkgsite/internal/api#{{.ResponsePaginatedType}}">{{.ResponsePaginatedType}}</a>{{else}}{{.ResponsePaginatedType}}{{end}}]
                {{else}}
                  <a href="https://pkg.go.dev/golang.org/x/pkgsite/internal/api#{{.Response}}">{{.Response}}</a>
                {{end}}
              </code></span>
            </div>
          </li>
        {{end}}
      </ul>
    </div>
  </main>
{{end}}
