@page "/api"

<PageTitle>API Surface</PageTitle>

<div class="api-grid">
    <section class="panel">
        <h2 class="panel-title">Reference data</h2>
        <p class="panel-copy"><code>GET /api/reference-data</code></p>
        <pre class="code-block">{
  "attackTables": [
    {
      "key": "broadsword",
      "label": "Broadsword",
      "attackKind": "melee",
      "fumbleMinRoll": 1,
      "fumbleMaxRoll": 2
    }
  ],
  "criticalTables": [
    {
      "key": "mana",
      "label": "Mana Critical Strike Table",
      "family": "standard",
      "sourceDocument": "Mana.pdf",
      "notes": "Imported from PDF XML extraction."
    }
  ]
}</pre>
    </section>

    <section class="panel">
        <h2 class="panel-title">Attack lookup</h2>
        <p class="panel-copy"><code>POST /api/lookup/attack</code></p>
        <pre class="code-block">{
  "attackTable": "broadsword",
  "armorType": "AT10",
  "roll": 111,
  "criticalRoll": 72
}</pre>
    </section>

    <section class="panel">
        <h2 class="panel-title">Critical lookup</h2>
        <p class="panel-copy"><code>POST /api/lookup/critical</code></p>
        <pre class="code-block">{
  "criticalType": "mana",
  "column": "E",
  "roll": 100,
  "group": null
}</pre>
        <p class="panel-copy">Response now includes table metadata, roll-band bounds, raw imported cell text, parse status, and parsed JSON alongside the gameplay description.</p>
    </section>

    <section class="panel">
        <h2 class="panel-title">Cell editor load</h2>
        <p class="panel-copy"><code>GET /api/tables/critical/{slug}/cells/{resultId}</code></p>
        <pre class="code-block">{
  "resultId": 412,
  "tableSlug": "slash",
  "tableName": "Slash Critical Strike Table",
  "rollBand": "66-70",
  "groupKey": null,
  "columnKey": "C",
  "rawCellText": "Original imported full cell text",
  "descriptionText": "Current curated prose",
  "rawAffixText": "+8H - 2S",
  "parseStatus": "verified",
  "parsedJson": "{}",
  "validationMessages": [],
  "effects": [],
  "branches": []
}</pre>
        <p class="panel-copy">Use this to retrieve the full editable result graph for one critical-table cell, including nested branches and normalized effects.</p>
    </section>

    <section class="panel">
        <h2 class="panel-title">Cell re-parse</h2>
        <p class="panel-copy"><code>POST /api/tables/critical/{slug}/cells/{resultId}/reparse</code></p>
        <pre class="code-block">{
  "rawCellText": "Strike to thigh. +8H\nWith greaves: blow glances aside."
}</pre>
        <p class="panel-copy">Re-runs the shared single-cell parser and returns a refreshed editor payload without saving changes.</p>
    </section>

    <section class="panel">
        <h2 class="panel-title">Cell editor save</h2>
        <p class="panel-copy"><code>PUT /api/tables/critical/{slug}/cells/{resultId}</code></p>
        <pre class="code-block">{
  "rawCellText": "Corrected imported text",
  "descriptionText": "Rewritten prose after manual review",
  "rawAffixText": "+10H - must parry 2 rnds",
  "parseStatus": "manually_curated",
  "parsedJson": "{\"reviewed\":true}",
  "effects": [
    {
      "effectCode": "direct_hits",
      "target": null,
      "valueInteger": 10,
      "valueDecimal": null,
      "valueExpression": null,
      "durationRounds": null,
      "perRound": null,
      "modifier": null,
      "bodyPart": null,
      "isPermanent": false,
      "sourceType": "symbol",
      "sourceText": "+10H"
    }
  ],
  "branches": []
}</pre>
        <p class="panel-copy">The save endpoint replaces the stored base result, branch rows, and effect rows for that cell with the submitted curated payload.</p>
    </section>
</div>
