#!/usr/bin/env python3
"""
Erzeugt eine simulierte Folgeausgabe der RY-Ticketliste zum Testen des
Update-Pfads (neu / aktualisiert / aus der Liste entfernt).

    python docs/testdaten/make-testfile.py

Grundlage ist die echte Ausgabe vom 27.08.2026. Veraendert werden:
  - 25701: Termin von "TBD" auf ein Datum, neue Remark-Zeile (blau = aktualisiert)
  - 25700: Statuszelle gruen (= erledigt) statt offen
  - 25702: zusaetzliche Terminverschiebung
  - NEU:   Bug 25710 und Feature-Request S2026090101
  - ENTFERNT: 25467 (muss danach als "nicht mehr gelistet" erscheinen)

Erfordert openpyxl. Die Datei ist reine Testdaten, keine Lieferantendatei.

Hinweis: openpyxl schreibt Zellen ohne Rich-Text-Abschnitte zurueck. In der
erzeugten Datei stehen Farben daher nur auf Zellenebene – Faerbungen, die im
Original nur einzelne Textabschnitte betrafen (z. B. bei W2026072302), fehlen.
Fuer den Test des Update-Pfads ist das unerheblich; die Anwendung liest beide
Ebenen (siehe Barox\\Excel\\Cell).
"""

import re
from pathlib import Path

from openpyxl import load_workbook
from openpyxl.styles import Font

ROOT = Path(__file__).resolve().parents[2]
SOURCE = ROOT / "excel" / "Barox Tickets_20260827.xlsx"
TARGET = Path(__file__).resolve().parent / "Barox Tickets_20260903.xlsx"

# Farben gemaess Legende im Tabellenblatt
GREEN = Font(color="FF00B050")   # erledigt
BLUE = Font(color="FF0000FF")    # in dieser Ausgabe aktualisiert

wb = load_workbook(SOURCE)
ws = wb.active



def key(value) -> str:
    """Ticketnummer ohne Zusaetze wie "(cancelled)" – wie in RowParser."""
    return re.sub(r"[^A-Za-z0-9]", "", re.sub(r"\([^)]*\)", "", str(value))).upper()


# Zeilen der Tickets im Original (1-basiert), nach Ticketnummer
rows = {key(ws.cell(row=r, column=2).value): r
        for r in range(2, ws.max_row + 1)
        if ws.cell(row=r, column=2).value is not None}

# --- 25701: Termin gesetzt, neue Meldung ------------------------------------
r = rows["25701"]
ws.cell(row=r, column=5, value="2026/10/20").font = BLUE
ws.cell(row=r, column=6,
        value="9/3: FW release ETD = Oct 20th.\n"
              "8/6: Clarifying.\n7/17: Bug no. 25701.").font = BLUE

# --- 25700: freigegeben ------------------------------------------------------
r = rows["25700"]
ws.cell(row=r, column=5).font = GREEN
ws.cell(row=r, column=6,
        value="9/3: FW v6.54.4012 was released on Sep 15th.\n"
              "8/27: FW release ETD = Sep 15th.").font = BLUE

# --- 25702: erneut verschoben ------------------------------------------------
r = rows["25702"]
ws.cell(row=r, column=5,
        value="2026/8/10\n=> 2026/10/7\n=> 2026/9/15\n=> 2026/10/31").font = BLUE
ws.cell(row=r, column=6,
        value="9/3: FW release ETD = Oct 31st.\n"
              "8/27: FW release ETD = Sep 15th.").font = BLUE

# --- 25467 aus der Liste nehmen ---------------------------------------------
ws.delete_rows(rows["25467"])

# --- Zwei neue Tickets vor der Legende einfuegen ----------------------------
# Erste leere Zeile nach den Tickets suchen
insert_at = 2
for r in range(2, ws.max_row + 2):
    if ws.cell(row=r, column=2).value is None:
        insert_at = r
        break

new_rows = [
    ("2026-08-29", "25710", "RY-LGSP23-10G",
     "PSGS-2610G_v6.54.3941_Barox: SNMP trap is not sent when a port goes down",
     "TBD", "9/3: Bug no. 25710; under analysis."),
    ("2026-09-01", "S2026090101", "38xx series models",
     "Barox 38xx series: LLDP-MED support for PoE budget negotiation",
     "2026/12/15", "9/3: Feasibility confirmed; ETD = Dec 15th."),
]

for offset, values in enumerate(new_rows):
    ws.insert_rows(insert_at + offset)
    for col, value in enumerate(values, start=1):
        cell = ws.cell(row=insert_at + offset, column=col, value=value)
        if col in (5, 6):
            cell.font = BLUE

wb.save(TARGET)
print(f"geschrieben: {TARGET}")
