#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FIX 2: Corregge fasce pressione e rimuove pills tratte
Lancia nella cartella di tracciato6.php:
  python3 fix_fasce_v2.py
"""
import os

f = 'tracciato6.php'
with open(f, 'r', encoding='utf-8') as fh:
    c = fh.read()

os.rename(f, f + '.pre_fix2')
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 fasce v2...\n")

# ============================================================
# 1. NUOVE 6 FASCE — PN_COLORS
# ============================================================
sr("var PN_COLORS = {'0\u201315':'#4caf50', '16\u201318':'#2196f3', '18\u201320':'#ff9800', '20\u201322':'#e53935', '23\u201326':'#9c27b0'};",
   "var PN_COLORS = {'0\u201315':'#4caf50', '15\u201318':'#2196f3', '18\u201320':'#ff9800', '20\u201322':'#e53935', '22\u201324':'#9c27b0', '24\u201326':'#d50000'};",
   "PN_COLORS 6 fasce")

# ============================================================
# 2. PN_LIMITS
# ============================================================
sr("var PN_LIMITS = [{name:'0\u201315',min:0,max:15},{name:'16\u201318',min:16,max:18},{name:'18\u201320',min:18,max:20},{name:'20\u201322',min:20,max:22},{name:'23\u201326',min:23,max:26}];",
   "var PN_LIMITS = [{name:'0\u201315',min:0,max:15},{name:'15\u201318',min:15,max:18},{name:'18\u201320',min:18,max:20},{name:'20\u201322',min:20,max:22},{name:'22\u201324',min:22,max:24},{name:'24\u201326',min:24,max:26}];",
   "PN_LIMITS 6 fasce")

# ============================================================
# 3. getPN — 6 fasce contigue
# ============================================================
sr("""function getPN(bar) {
  if (bar <= 15) return '0\u201315';
  if (bar <= 18) return '16\u201318';
  if (bar <= 20) return '18\u201320';
  if (bar <= 22) return '20\u201322';
  return '23\u201326';
}""",
   """function getPN(bar) {
  if (bar <= 15) return '0\u201315';
  if (bar <= 18) return '15\u201318';
  if (bar <= 20) return '18\u201320';
  if (bar <= 22) return '20\u201322';
  if (bar <= 24) return '22\u201324';
  return '24\u201326';
}""",
   "getPN 6 fasce")

# ============================================================
# 4. zones in drawPNFull — 6 zones
# ============================================================
sr("""  var zones = [
    {name: '0\u201315',  from: 0,  to: 15, c: 'rgba(76,175,80,.05)'},
    {name: '16\u201318', from: 15, to: 18, c: 'rgba(33,150,243,.07)'},
    {name: '18\u201320', from: 18, to: 20, c: 'rgba(255,152,0,.07)'},
    {name: '20\u201322', from: 20, to: 22, c: 'rgba(229,57,53,.07)'},
    {name: '23\u201326', from: 22, to: 26, c: 'rgba(156,39,176,.07)'}
  ];""",
   """  var zones = [
    {name: '0\u201315',  from: 0,  to: 15, c: 'rgba(76,175,80,.05)'},
    {name: '15\u201318', from: 15, to: 18, c: 'rgba(33,150,243,.07)'},
    {name: '18\u201320', from: 18, to: 20, c: 'rgba(255,152,0,.07)'},
    {name: '20\u201322', from: 20, to: 22, c: 'rgba(229,57,53,.07)'},
    {name: '22\u201324', from: 22, to: 24, c: 'rgba(156,39,176,.07)'},
    {name: '24\u201326', from: 24, to: 26, c: 'rgba(213,0,0,.07)'}
  ];""",
   "zones 6")

# ============================================================
# 5. pnOrder — 6 fasce (ALL occurrences)
# ============================================================
sr("var pnOrder = ['0\u201315', '16\u201318', '18\u201320', '20\u201322', '23\u201326'];",
   "var pnOrder = ['0\u201315', '15\u201318', '18\u201320', '20\u201322', '22\u201324', '24\u201326'];",
   "pnOrder 6", count=0)

# ============================================================
# 6. Chart.js limit lines — aggiorna da 5 a 6 soglie
# ============================================================
sr("""        // Fasce pressione (d'Andria 26/03/26): 0-15, 16-18, 18-20, 20-22, 23-26 bar
        {label: '15 bar', data: [{x:0,y:15},{x:185,y:15}], borderColor: '#4caf50', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '18 bar', data: [{x:0,y:18},{x:185,y:18}], borderColor: '#2196f3', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '20 bar', data: [{x:0,y:20},{x:185,y:20}], borderColor: '#ff9800', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '22 bar', data: [{x:0,y:22},{x:185,y:22}], borderColor: '#e53935', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '26 bar', data: [{x:0,y:26},{x:185,y:26}], borderColor: '#9c27b0', borderWidth: 1, borderDash: [4,4], pointRadius: 0, yAxisID: 'y'},
        // Zone fill
        {label: '_z015', data: [{x:0,y:15},{x:185,y:15}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 0}, above: 'rgba(76,175,80,.03)'}, yAxisID: 'y'},
        {label: '_z1618', data: [{x:0,y:18},{x:185,y:18}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 15}, above: 'rgba(33,150,243,.03)'}, yAxisID: 'y'},
        {label: '_z1822', data: [{x:0,y:22},{x:185,y:22}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 18}, above: 'rgba(255,152,0,.04)'}, yAxisID: 'y'},""",
   """        // Fasce pressione (d'Andria): 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar
        {label: '15 bar', data: [{x:0,y:15},{x:185,y:15}], borderColor: '#4caf50', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '18 bar', data: [{x:0,y:18},{x:185,y:18}], borderColor: '#2196f3', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '20 bar', data: [{x:0,y:20},{x:185,y:20}], borderColor: '#ff9800', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '22 bar', data: [{x:0,y:22},{x:185,y:22}], borderColor: '#e53935', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '24 bar', data: [{x:0,y:24},{x:185,y:24}], borderColor: '#9c27b0', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},
        {label: '26 bar', data: [{x:0,y:26},{x:185,y:26}], borderColor: '#d50000', borderWidth: 1, borderDash: [4,4], pointRadius: 0, yAxisID: 'y'},
        // Zone fill
        {label: '_z015', data: [{x:0,y:15},{x:185,y:15}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 0}, above: 'rgba(76,175,80,.03)'}, yAxisID: 'y'},
        {label: '_z1518', data: [{x:0,y:18},{x:185,y:18}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 15}, above: 'rgba(33,150,243,.03)'}, yAxisID: 'y'},
        {label: '_z1820', data: [{x:0,y:20},{x:185,y:20}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 18}, above: 'rgba(255,152,0,.03)'}, yAxisID: 'y'},
        {label: '_z2022', data: [{x:0,y:22},{x:185,y:22}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 20}, above: 'rgba(229,57,53,.03)'}, yAxisID: 'y'},
        {label: '_z2224', data: [{x:0,y:24},{x:185,y:24}], borderWidth: 0, pointRadius: 0, fill: {target: {value: 22}, above: 'rgba(156,39,176,.03)'}, yAxisID: 'y'},""",
   "Chart.js 6 limits")

# ============================================================
# 7. RIMUOVI PILLS TRATTE dal grafico PN
#    Commenta il blocco che disegna le pills colorate in alto
# ============================================================
sr("""  // TRATTA PILLS (top bar)
  TRATTE.forEach(function(tr, ti) {
    var x1 = toX(tr.km_start), x2 = toX(tr.km_end);
    if (x2 < ml || x1 > W - mr) return;
    var trWP = WP.filter(function(w) { return w.km >= tr.km_start && w.km <= tr.km_end; });
    var mxB = 0;
    trWP.forEach(function(w) { var b = Math.max(0, (w.mg || 0) / 10.2); if (b > mxB) mxB = b; });
    var pn = getPN(mxB);
    ctx.fillStyle = PN_COLORS[pn] || '#999';
    var pw = Math.max(x2 - x1 - 4, 20);
    ctx.beginPath(); ctx.roundRect(x1 + 2, mt - 5, pw, 20, 4); ctx.fill();
    ctx.fillStyle = '#fff'; ctx.font = 'bold 8px DM Sans'; ctx.textAlign = 'center';
    ctx.fillText('TR' + (ti + 1) + ' ' + tr.dn + ' [' + pn + '] (max ' + mxB.toFixed(1) + ' bar)', (x1 + x2) / 2, mt + 8);
  });""",
   """  // TRATTA PILLS rimossi (richiesta Paolo d'Andria)""",
   "Rimuovi pills")

# ============================================================
# 8. Aggiorna testi con le 6 fasce corrette
# ============================================================
sr("Fasce: 0-15, 16-18, 18-20, 20-22, 23-26 bar",
   "Fasce: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "testi fasce", count=0)

sr("suddivisa in 5 fasce (0\u201315, 16\u201318, 18\u201320, 20\u201322, 23\u201326 bar)",
   "suddivisa in 6 fasce contigue (0\u201315, 15\u201318, 18\u201320, 20\u201322, 22\u201324, 24\u201326 bar)",
   "nota 6 fasce")

sr("Intervalli: 0-15, 16-18, 18-20, 20-22, 23-26 bar",
   "Intervalli: 0-15, 15-18, 18-20, 20-22, 22-24, 24-26 bar",
   "distinta 6 fasce")

# ============================================================
# 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)")

# Check
for old in ["'16\u201318'", "'23\u201326'", "16-18", "23-26"]:
    nn = c.count(old)
    if nn:
        print(f"  ⚠️  Vecchia fascia '{old}' ancora presente: {nn}x")

print(f"\n🎉 Ricarica e testa!")