#!/bin/bash
# ============================================================
# PATCH Fasce Pressione — Paolo d'Andria 26/03/2026
# Lancia da root su rufio nella cartella di tracciato6.php
#
# USO: bash patch_fasce.sh tracciato6.php
# ============================================================

FILE="${1:-tracciato6.php}"

if [ ! -f "$FILE" ]; then
  echo "❌ File $FILE non trovato!"
  exit 1
fi

# Backup
cp "$FILE" "${FILE}.bak_$(date +%Y%m%d_%H%M%S)"
echo "✅ Backup creato"

# --- 1. PN_COLORS ---
sed -i "s|var PN_COLORS = {PN6:'#4caf50', PN10:'#2196f3', PN16:'#ff9800', PN25:'#e53935', PN40:'#9c27b0'};|var PN_COLORS = {'0\u201315':'#4caf50', '16\u201318':'#2196f3', '18\u201320':'#ff9800', '20\u201322':'#e53935', '23\u201326':'#9c27b0'};|" "$FILE"
echo "1. PN_COLORS"

# --- 2. PN_LIMITS ---
sed -i "s|var PN_LIMITS = \[{name:'PN6',max:6},{name:'PN10',max:10},{name:'PN16',max:16},{name:'PN25',max:25},{name:'PN40',max:40}\];|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}];|" "$FILE"
echo "2. PN_LIMITS"

# --- 3. getPN function (multiline — use perl) ---
perl -i -0pe "s|function getPN\(bar\) \{\s*for \(var i = 0; i < PN_LIMITS\.length; i\+\+\) \{ if \(bar <= PN_LIMITS\[i\]\.max\) return PN_LIMITS\[i\]\.name; \}\s*return 'PN40';\s*\}|function getPN(bar) {\n  if (bar <= 15) return '0\x{2013}15';\n  if (bar <= 18) return '16\x{2013}18';\n  if (bar <= 20) return '18\x{2013}20';\n  if (bar <= 22) return '20\x{2013}22';\n  return '23\x{2013}26';\n}|s" "$FILE"
echo "3. getPN()"

# --- 4. zones array in drawPNFull (multiline — perl) ---
perl -i -0pe "s|\{name: 'PN6',\s*from: 0,\s*to: 6,\s*c: 'rgba\(76,175,80,\.05\)'\},\s*\{name: 'PN10', from: 6,\s*to: 10, c: 'rgba\(33,150,243,\.05\)'\},\s*\{name: 'PN16', from: 10, to: 16, c: 'rgba\(255,152,0,\.05\)'\},\s*\{name: 'PN25', from: 16, to: 25, c: 'rgba\(229,57,53,\.05\)'\},\s*\{name: 'PN40', from: 25, to: 40, c: 'rgba\(156,39,176,\.05\)'\}|{name: '0\x{2013}15',  from: 0,  to: 15, c: 'rgba(76,175,80,.05)'},\n    {name: '16\x{2013}18', from: 15, to: 18, c: 'rgba(33,150,243,.07)'},\n    {name: '18\x{2013}20', from: 18, to: 20, c: 'rgba(255,152,0,.07)'},\n    {name: '20\x{2013}22', from: 20, to: 22, c: 'rgba(229,57,53,.07)'},\n    {name: '23\x{2013}26', from: 22, to: 26, c: 'rgba(156,39,176,.07)'}|s" "$FILE"
echo "4. zones"

# --- 5. pnOrder (tutte le occorrenze) ---
sed -i "s|var pnOrder = \['PN6', 'PN10', 'PN16', 'PN25', 'PN40'\];|var pnOrder = ['0\u201315', '16\u201318', '18\u201320', '20\u201322', '23\u201326'];|g" "$FILE"
echo "5. pnOrder (all)"

# --- 6. maxBar ---
sed -i "s|var maxBar = 32;|var maxBar = 28;|" "$FILE"
echo "6. maxBar"

# --- 7. Chart.js PN limit lines (multiline — perl) ---
perl -i -0pe "s|// PN limit lines .+? more visible\s*\{label: 'PN25 \(25 bar\)'.+?yAxisID: 'y'\},\s*\{label: 'PN16 \(16 bar\)'.+?yAxisID: 'y'\},\s*// PN16 safe zone fill\s*\{label: '_pn16zone'.+?yAxisID: 'y'\},\s*// PN16-PN25 warning zone\s*\{label: '_pn25zone'.+?yAxisID: 'y'\},|// Fasce pressione (d'Andria 26/03/26): 0-15, 16-18, 18-20, 20-22, 23-26 bar\n        {label: '15 bar', data: [{x:0,y:15},{x:185,y:15}], borderColor: '#4caf50', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},\n        {label: '18 bar', data: [{x:0,y:18},{x:185,y:18}], borderColor: '#2196f3', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},\n        {label: '20 bar', data: [{x:0,y:20},{x:185,y:20}], borderColor: '#ff9800', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},\n        {label: '22 bar', data: [{x:0,y:22},{x:185,y:22}], borderColor: '#e53935', borderWidth: 1.2, borderDash: [6,3], pointRadius: 0, yAxisID: 'y'},\n        {label: '26 bar', data: [{x:0,y:26},{x:185,y:26}], borderColor: '#9c27b0', borderWidth: 1, borderDash: [4,4], pointRadius: 0, yAxisID: 'y'},\n        {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'},\n        {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'},\n        {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'},|s" "$FILE"
echo "7. Chart.js limit lines"

# --- 8. calcPiez w.pn ---
sed -i "s|w\.pn = w\.bar > 25 ? 'PN40' : w\.bar > 16 ? 'PN25' : 'PN16';|w.pn = getPN(w.bar);|" "$FILE"
echo "8. calcPiez w.pn"

# --- 9. Chart tooltip (multiline — perl) ---
perl -i -0pe "s|if \(l === 'Pressione \(bar\)'\) \{\s*var b = c\.parsed\.y;\s*var pn = b > 25 \? 'PN40' : b > 16 \? 'PN25' : 'PN16';\s*return 'p = ' \+ b\.toFixed\(1\) \+ ' bar \(' \+ \(b \* 10\.2\)\.toFixed\(0\) \+ ' mH.O\) .+ ' \+ pn;\s*\}|if (l === 'Pressione (bar)') {\n                var b = c.parsed.y;\n                var cls = getPN(b);\n                return 'p = ' + b.toFixed(1) + ' bar (' + (b * 10.2).toFixed(0) + ' mH\x{2082}O) \x{2192} Fascia ' + cls + ' bar';\n              }|s" "$FILE"
echo "9. Chart tooltip"

# --- 10. drawPNFull tooltip ---
sed -i "s|' bar</b> \\\\u2192 <b>' + pn + '</b>';|' bar</b> \\\\u2192 <b>Fascia ' + pn + ' bar</b>';|" "$FILE"
echo "10. PN tooltip"

# --- 11. Sidebar title ---
sed -i "s|ctx.fillText('Riepilogo per classe PN', sx, sy);|ctx.fillText('Riepilogo per fascia pressione', sx, sy);|" "$FILE"
echo "11. Sidebar title"

# --- 12. Nota Idraulica header ---
sed -i 's|p<sub>stat</sub> max \\u2192 PN|p<sub>stat</sub> max \\u2192 Fascia|' "$FILE"
echo "12. Nota header"

# --- 13. Nota Idraulica row ---
sed -i "s|+ maxStat.toFixed(1) + ' bar \\\\u2192 ' + pnStat + '</td>'|+ maxStat.toFixed(1) + ' bar \\\\u2192 Fascia ' + pnStat + ' bar</td>'|" "$FILE"
echo "13. Nota row"

# --- 14. Distinta title ---
sed -i "s|Classificazione PN per pressione statica: p = (HGL \\\\u2212 DEM) / 10.2 bar|Classificazione per fasce di pressione: p = (HGL \\\\u2212 DEM) / 10.2 bar \\\\u2014 Intervalli: 0-15, 16-18, 18-20, 20-22, 23-26 bar|" "$FILE"
echo "14. Distinta title"

# --- 15. Distinta col ---
sed -i 's|Classe PN</th>|Fascia pressione</th>|' "$FILE"
echo "15. Distinta col"

# --- 16. Tratta pills ---
sed -i "s|ctx.fillText('TR' + (ti + 1) + ' ' + tr.dn + ' ' + pn + ' (max ' + mxB.toFixed(0) + ' bar)', (x1 + x2) / 2, mt + 8);|ctx.fillText('TR' + (ti + 1) + ' ' + tr.dn + ' [' + pn + '] (max ' + mxB.toFixed(1) + ' bar)', (x1 + x2) / 2, mt + 8);|" "$FILE"
echo "16. Tratta pills"

# --- 17. Nota footer ---
sed -i "s|<b>PN</b> = classificazione da pressione statica pura.|<b>Fascia</b> = intervallo di pressione statica.|" "$FILE"
echo "17. Nota footer"

# --- 18. Nota sezione 2 ---
sed -i "s|Il grafico PN e la distinta materiali si basano sulla pressione statica\.|Il grafico pressioni e la distinta materiali si basano sulla pressione statica, suddivisa in 5 fasce (0–15, 16–18, 18–20, 20–22, 23–26 bar).|" "$FILE"
echo "18. Nota sezione 2"

# --- 19. Panel title HTML ---
sed -i 's|CLASSIFICAZIONE PN \&mdash; Pressione Nominale Condotte|CLASSIFICAZIONE PRESSIONI \&mdash; Fasce di Pressione Statica|' "$FILE"
echo "19. Panel title"

# --- 20. Button label ---
sed -i 's|>⬛ PN</button>|>⬛ Pressioni</button>|' "$FILE"
echo "20. Button"

# --- 21. Export header ---
sed -i "s|'CLASSIFICAZIONE PN \\\\u2014 GAA Grande Acquedotto Adriatico \\\\u2014 176.7 km'|'FASCE DI PRESSIONE \\\\u2014 GAA Grande Acquedotto Adriatico \\\\u2014 ' + maxKm.toFixed(1) + ' km'|" "$FILE"
echo "21. Export header"

# --- 22. Export footer ---
sed -i "s|'CAPEX \\\\u20ac843M | Pressione statica (HGL-DEM)/10.2 | \\\\u00a9 2026 WeProject / Bangherang Studio'|'p=(HGL-DEM)/10.2 | Fasce: 0-15, 16-18, 18-20, 20-22, 23-26 bar | \\\\u00a9 2026 WeProject / Bangherang Studio'|" "$FILE"
echo "22. Export footer"

# --- 23. Export filename ---
sed -i "s|'GAA_PN_Classification_v13.png'|'GAA_Pressioni_Fasce_v13.png'|" "$FILE"
echo "23. Export filename"

# --- 24. Panel info text ---
sed -i 's|p_stat = (HGL\&minus;DEM)/10.2 | Pressione statica pura | Scroll=zoom, Drag=pan, DblClick=reset|p=(HGL\&minus;DEM)/10.2 | Fasce: 0-15, 16-18, 18-20, 20-22, 23-26 bar | Scroll=zoom, Drag=pan, DblClick=reset|' "$FILE"
echo "24. Panel info"

# --- 25. Sidebar canvas header ---
sed -i "s|ctx.fillText('\\\\ud83d\\\\udce6 Distinta Materiali', sx, sy + 10);|ctx.fillText('\\\\ud83d\\\\udce6 Riepilogo Fasce', sx, sy + 10);|" "$FILE"
echo "25. Sidebar header"

# --- 26. Distinta grand total ---
sed -i "s|'Riepilogo globale \\\\u2014 '|'Riepilogo per fasce \\\\u2014 '|" "$FILE"
echo "26. Distinta grand total"

echo ""
echo "============================================"
echo "✅ PATCH COMPLETATA — 26 sostituzioni"
echo "============================================"
echo ""
echo "Verifica residui vecchi PN:"
grep -c "'PN6'" "$FILE" && echo "⚠️  PN6 trovato" || echo "✅ PN6 pulito"
grep -c "'PN10'" "$FILE" && echo "⚠️  PN10 trovato" || echo "✅ PN10 pulito"
grep -c "'PN16'" "$FILE" && echo "⚠️  PN16 trovato" || echo "✅ PN16 pulito"
grep -c "'PN25'" "$FILE" && echo "⚠️  PN25 trovato" || echo "✅ PN25 pulito"
grep -c "'PN40'" "$FILE" && echo "⚠️  PN40 trovato" || echo "✅ PN40 pulito"
echo ""
echo "File patchato: $FILE"
echo "Backup: ${FILE}.bak_*"
