#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FIX 3: Allinea Nota Idraulica, Distinta, export e tutti i testi alle 6 fasce
Lancia: python3 fix_fasce_v3.py
"""
import os

f = 'tracciato6.php'
with open(f, 'r', encoding='utf-8') as fh:
    c = fh.read()

os.rename(f, f + '.pre_fix3')
n = 0

def sr(old, new, label, count=1):
    global c, n
    if old not in c:
        print(f"  ⚠️  [{label}] non trovato")
        return
    if count == 0:
        x = c.count(old)
        c = c.replace(old, new)
        n += x
        print(f"  ✅ [{label}] ({x}x)")
    else:
        c = c.replace(old, new, count)
        n += 1
        print(f"  ✅ [{label}]")

print("🔧 Fix v3 — Nota Idraulica + Distinta + testi...\n")

# ============================================================
# 1. Nota Idraulica — sezione 2 testo fasce
# ============================================================
sr("suddivisa in 6 fasce contigue (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar)",
   "suddivisa in 6 fasce contigue di pressione statica (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar)",
   "Nota s2 testo")

# Se la vecchia versione era ancora con 5 fasce
sr("suddivisa in 5 fasce (0\u201315, 16\u201318, 18\u201320, 20\u201322, 23\u201326 bar)",
   "suddivisa in 6 fasce contigue di pressione statica (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar)",
   "Nota s2 vecchia")

# ============================================================
# 2. Nota Idraulica — tabella per tratta: 
#    la colonna "Fascia" mostra getPN() che già restituisce le 6 fasce OK
#    Ma il footer note va aggiornato
# ============================================================
sr("<b>Fascia</b> = intervallo di pressione statica.",
   "<b>Fascia</b> = intervallo di pressione statica (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar).",
   "Nota footer fasce")

# Se c'era ancora il vecchio
sr("<b>PN</b> = classificazione da pressione statica pura.",
   "<b>Fascia</b> = intervallo di pressione statica (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar).",
   "Nota footer vecchio")

# ============================================================
# 3. Distinta Materiali — titolo con fasce aggiornate
# ============================================================
sr("Intervalli: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "Distinta subtitle")

# Vecchia versione
sr("Intervalli: 0-15, 16-18, 18-20, 20-22, 23-26 bar",
   "6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "Distinta subtitle vecchio")

# ============================================================
# 4. Export PNG — header e footer
# ============================================================
sr("Fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "Export testi", count=0)

# Vecchi testi rimasti
sr("Fasce: 0-15, 16-18, 18-20, 20-22, 23-26 bar",
   "6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "Export testi vecchi", count=0)

# ============================================================
# 5. Panel info header text nel pannello PN fullscreen
# ============================================================
sr("p=(HGL&minus;DEM)/10.2 | Fasce: 0-15, 16-18, 18-20, 20-22, 23-26 bar",
   "p=(HGL&minus;DEM)/10.2 | 6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "Panel header info")

# Già fixato dalla v2 ma in formato diverso
sr("p=(HGL&minus;DEM)/10.2 | 6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar | Scroll=zoom",
   "p=(HGL&minus;DEM)/10.2 | 6 fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar | Scroll=zoom",
   "Panel header check")

# ============================================================
# 6. Nota Idraulica — Sezione 5 strategia mitigazione
#    (qui non ci sono riferimenti PN specifici, OK)
# ============================================================

# ============================================================
# 7. Nota Idraulica — "Classificazione PN definitiva" text
# ============================================================
sr("La classificazione PN definitiva",
   "La classificazione definitiva delle fasce di pressione",
   "Nota PN definitiva")

# ============================================================
# 8. mapInfoBox disclaimer — aggiorna da PN a fasce
# ============================================================
sr("Pressione p=(HGL\u2212DEM)/10.2 bar. Il presente studio",
   "Pressione p=(HGL\u2212DEM)/10.2 bar. Classificazione in 6 fasce contigue (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar). Il presente studio",
   "mapInfo fasce")

# ============================================================
# 9. Sidebar riepilogo nel canvas — il titolo "Riepilogo Fasce"
#    è già OK dalla patch precedente. Aggiorna il subtotale
# ============================================================
sr("ctx.fillText('Totale tracciato: ' + maxKm.toFixed(1) + ' km', sx, sy);",
   "ctx.fillText('Totale: ' + maxKm.toFixed(1) + ' km | 6 fasce', sx, sy);",
   "Sidebar subtitle")

# ============================================================
# 10. Copyright/disclaimer in vari posti — Nota Idraulica
# ============================================================
sr("classificazione PN definitiva sar\\u00e0 determinata",
   "classificazione definitiva sar\\u00e0 determinata",
   "Nota classificazione")

# Se old text references "classe PN installata"
sr("classe PN installata",
   "fascia di pressione prevista",
   "Nota classe PN")

# ============================================================
# WRITE
# ============================================================
with open(f, 'w', encoding='utf-8') as fh:
    fh.write(c)

print(f"\n{'='*50}")
print(f"✅ {n} modifiche applicate")
print(f"📦 {f} ({len(c):,} bytes)")

# Scan for any remaining old PN class references
print(f"\nScan residui:")
old_refs = ["'PN6'", "'PN10'", "'PN16'", "'PN25'", "'PN40'", "16\u201318", "23\u201326", "classe PN"]
for old in old_refs:
    nn = c.count(old)
    if nn:
        lines = c.split('\n')
        for i, line in enumerate(lines, 1):
            if old in line:
                print(f"  ⚠️  '{old}' riga {i}: {line.strip()[:90]}")
    else:
        print(f"  ✅ '{old}' — pulito")

print(f"\n🎉 Tutto allineato! Ricarica e verifica Nota Idraulica + Distinta + Export")
