#!/usr/bin/env python3
"""Fetch article 15385, optimize tables with gray borders, PATCH back."""
import json, urllib.request, re

TOKEN = "c2hhMjU2Ojc5NDpjYzY0ZTQ4NmVkZGJiMmU1YTk2YTI4YmU4OTcwMzQ5MjRmNjZmMjcyMmRiMGJlM2JhYWI0MDhlNmI4MDZlMmI0"
BASE = "https://www.brettspiel-news.de/api/index.php/v1/content/articles"

# ── 1. Fetch article ──────────────────────────────────────
req = urllib.request.Request(f"{BASE}/15385", headers={
    "X-Joomla-Token": TOKEN,
    "Accept": "application/vnd.api+json"
})
resp = urllib.request.urlopen(req)
data = json.loads(resp.read())
text = data["data"]["attributes"]["text"]
print(f"Fetched article 15385: '{data['data']['attributes']['title']}'")
print(f"Text length: {len(text)}")

# ── 2. Patch Table 1: "Für wen ist das Spiel?" ────────────
old1 = '<h2>Für wen ist das Spiel?</h2>\r\n<table>\r\n<tbody>\r\n<tr><th>✅ Dafür geeignet</th><th>❌ Eher nicht</th></tr>\r\n<tr>\r\n<td>Strategie-Fans, die Effizienz lieben</td>\r\n<td>Casual-Runden mit 5+ Personen</td>\r\n</tr>\r\n<tr>\r\n<td>Solo-Spieler (exzellenter Solo-Modus)</td>\r\n<td>Wer epische 3-Stunden-Partien sucht</td>\r\n</tr>\r\n<tr>\r\n<td>2–3 Personen (spielt sich am besten)</td>\r\n<td>Wer auf Glück statt Taktik steht</td>\r\n</tr>\r\n<tr>\r\n<td>Alle, die <em>Die rote Kathedrale</em> mochten</td>\r\n<td>&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>'

new1 = '''<div class="bsn-infobox">
<h2>Für wen ist das Spiel?</h2>
<table style="border-collapse: collapse; width: 100%; font-size: 0.95rem;">
<tbody>
<tr style="background: #f0f4ff;"><th style="border: 1px solid #ccc; padding: 10px 14px; text-align: left; color: #20228a;">✅ Dafür geeignet</th><th style="border: 1px solid #ccc; padding: 10px 14px; text-align: left; color: #20228a;">❌ Eher nicht</th></tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Strategie-Fans, die Effizienz lieben</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Casual-Runden mit 5+ Personen</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Solo-Spieler (exzellenter Solo-Modus)</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Wer epische 3-Stunden-Partien sucht</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">2–3 Personen (spielt sich am besten)</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Wer auf Glück statt Taktik steht</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px 14px;">Alle, die <em>Die rote Kathedrale</em> mochten</td>
<td style="border: 1px solid #ddd; padding: 8px 14px;">&nbsp;</td>
</tr>
</tbody>
</table>
</div>'''

if old1 in text:
    text = text.replace(old1, new1)
    print("✓ Table 1 replaced")
else:
    print("✗ Table 1 NOT FOUND. Searching...")
    idx = text.find('Für wen ist das Spiel')
    if idx >= 0:
        print(f"  Found at position {idx}")
        print(f"  Context: {repr(text[idx:idx+300])}")

# ── 3. Patch Table 2: "Die nackten Zahlen" ────────────────
old2 = '<h2>Die nackten Zahlen</h2>\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td><strong>BGG-Rating</strong></td>\r\n<td>8.1 / 10</td>\r\n</tr>\r\n<tr>\r\n<td><strong>BGG-Weight</strong></td>\r\n<td>3.06 / 5 (Kennerspiel)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Spieler</strong></td>\r\n<td>1–4 (am besten: 2–3)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Dauer</strong></td>\r\n<td>ca. 60–80 Minuten</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Designer</strong></td>\r\n<td>Shei S. &amp; Isra C. (auch <em>Die rote Kathedrale</em>)</td>\r\n</tr>\r\n<tr>\r\n<td><strong>Verlag</strong></td>\r\n<td>KOSMOS</td>\r\n</tr>\r\n</tbody>\r\n</table>'

new2 = '''<div class="bsn-infobox">
<h2>Die nackten Zahlen</h2>
<table style="border-collapse: collapse; width: 100%; font-size: 0.95rem;">
<tbody>
<tr style="background: #f0f4ff;">
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a; width: 30%;"><strong>BGG-Rating</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">8.1 / 10</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>BGG-Weight</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">3.06 / 5 (Kennerspiel)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Spieler</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">1–4 (am besten: 2–3)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Dauer</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">ca. 60–80 Minuten</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Designer</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">Shei S. &amp; Isra C. (auch <em>Die rote Kathedrale</em>)</td>
</tr>
<tr>
<td style="border: 1px solid #ccc; padding: 10px 14px; font-weight: bold; color: #20228a;"><strong>Verlag</strong></td>
<td style="border: 1px solid #ddd; padding: 10px 14px;">KOSMOS</td>
</tr>
</tbody>
</table>
</div>'''

if old2 in text:
    text = text.replace(old2, new2)
    print("✓ Table 2 replaced")
else:
    print("✗ Table 2 NOT FOUND. Searching...")
    idx = text.find('Die nackten Zahlen')
    if idx >= 0:
        print(f"  Found at position {idx}")
        print(f"  Context: {repr(text[idx:idx+300])}")

# ── 4. PATCH back ─────────────────────────────────────────
payload = json.dumps({"text": text}).encode()
req = urllib.request.Request(f"{BASE}/15385", data=payload, method="PATCH", headers={
    "X-Joomla-Token": TOKEN,
    "Accept": "application/vnd.api+json",
    "Content-Type": "application/json"
})
resp = urllib.request.urlopen(req)
result = json.loads(resp.read())
print(f"PATCH status: {resp.status}")
print(f"Updated: {result.get('data',{}).get('id')}")
