#!/usr/bin/env bash
set -euo pipefail
cd /home/iotcuboc/pyme || exit 1
F="public/presupuestos_v3.php"
TS=$(date +%Y%m%d_%H%M%S)
B="backups/elaborapro_presupuestos_v4_16_2_$TS"
mkdir -p "$B"; cp -p "$F" "$B/"
echo "Backup: /home/iotcuboc/pyme/$B"
TMP=$(mktemp); trap 'rm -f "$TMP"' EXIT; cp -p "$F" "$TMP"

if ! TMP="$TMP" php <<'PHP'
<?php
$f=getenv('TMP'); $s=file_get_contents($f);
if($s===false){fwrite(STDERR,"ERROR leyendo archivo.\n");exit(10);}
if(strpos($s,'ELABORAPRO_PRESUPUESTOS_V4_16_2')!==false){fwrite(STDERR,"ERROR: ya aplicado.\n");exit(11);}

function patchHref(&$s,$needle,$cls,$label){
 $pat='~<a\b(?=[^>]*href=["\'][^"\']*'.preg_quote($needle,'~').'[^"\']*["\'])[^>]*>~is';
 if(preg_match_all($pat,$s)!==1){fwrite(STDERR,"ERROR $label: enlace no único.\n");exit(20);}
 $s=preg_replace_callback($pat,function($m)use($cls){
  $t=$m[0];
  if(preg_match('~\bclass=(["\'])(.*?)\1~is',$t))
   return preg_replace('~\bclass=(["\'])(.*?)\1~is','class=$1btn ep-budget-action '.$cls.'$1',$t,1);
  return preg_replace('~^<a\b~i','<a class="btn ep-budget-action '.$cls.'"',$t,1);
 },$s,1);
}
patchHref($s,'presupuesto_editar_v3.php?id=','ep-budget-detail','Detalle');
patchHref($s,'presupuesto_costos_v3.php?id=','ep-budget-neutral','Costos');
patchHref($s,'presupuesto_presentacion_v3.php?id=','ep-budget-neutral','Presentación');
patchHref($s,'presupuestos_v3.php?convertir=','ep-budget-convert','Convertir');

/* Buscar el FORM por su contenido name="q", sin depender de espacios/CRLF. */
$pat='~<form\b([^>]*)>(?=(?:(?!</form>).)*\bname=["\']q["\'])(.*?)</form>~isu';
if(preg_match_all($pat,$s)!==1){fwrite(STDERR,"ERROR buscador: formulario q no único.\n");exit(30);}
$s=preg_replace_callback($pat,function($m){
 $open='<form'.$m[1].'>';
 if(preg_match('~\bclass=(["\'])(.*?)\1~is',$open))
  $open=preg_replace('~\bclass=(["\'])(.*?)\1~is','class=$1$2 ep-budget-search$1',$open,1);
 else $open=substr($open,0,-1).' class="ep-budget-search">';
 /* quitar style del FORM para evitar que el inline flex-wrap gane */
 $open=preg_replace('~\s+style=(["\']).*?\1~is','',$open);
 return $open.$m[2].'</form>';
},$s,1);

$css=<<<'CSS'

<style>
/* ELABORAPRO_PRESUPUESTOS_V4_16_2 */
body.op3-body .op3-main .ep-budget-action{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-height:34px!important;padding:6px 12px!important;border-radius:8px!important;line-height:1.15!important;text-decoration:none!important;white-space:nowrap!important;box-shadow:none!important;font-weight:600!important}
body.op3-body .op3-main a.ep-budget-detail{background:#BFE3C9!important;border:1px solid #A8D5B5!important;color:#205C36!important}
body.op3-body .op3-main a.ep-budget-detail:hover{background:#AEDAB9!important;border-color:#9BCDAA!important;color:#205C36!important}
body.op3-body .op3-main a.ep-budget-neutral{background:#F1F3F5!important;border:1px solid #DCE3EA!important;color:#475569!important}
body.op3-body .op3-main a.ep-budget-neutral:hover{background:#E7EAEE!important;border-color:#CDD5DE!important;color:#334155!important}
body.op3-body .op3-main a.ep-budget-convert{background:#C9DCFA!important;border:1px solid #AFCBF8!important;color:#174F9E!important}
body.op3-body .op3-main a.ep-budget-convert:hover{background:#BBD3F8!important;border-color:#9EBFF3!important;color:#123F80!important}
body.op3-body .op3-main form.ep-budget-search{margin:15px 0!important;display:flex!important;flex-direction:row!important;align-items:center!important;gap:10px!important;flex-wrap:nowrap!important;width:100%!important}
body.op3-body .op3-main form.ep-budget-search input[name="q"]{flex:1 1 auto!important;width:auto!important;min-width:0!important;margin:0!important}
body.op3-body .op3-main form.ep-budget-search button{flex:0 0 auto!important;width:auto!important;margin:0!important}
</style>

CSS;
$foot='~<\?php\s+render_footer_v3\(\);\s*\?>~';
if(preg_match_all($foot,$s)!==1){fwrite(STDERR,"ERROR footer.\n");exit(40);}
$s=preg_replace($foot,$css.'<?php render_footer_v3(); ?>',$s,1);
foreach(['ep-budget-detail','ep-budget-neutral','ep-budget-convert','ep-budget-search','ELABORAPRO_PRESUPUESTOS_V4_16_2'] as $x)
 if(strpos($s,$x)===false){fwrite(STDERR,"ERROR validación $x\n");exit(50);}
if(file_put_contents($f,$s)===false){fwrite(STDERR,"ERROR escritura.\n");exit(60);}
echo "OK: temporal preparado.\n";
PHP
then echo "ERROR: abortado; no se instaló ningún cambio."; exit 1; fi

php -l "$TMP"
grep -n -B2 -A3 -E 'ep-budget-(detail|neutral|convert|search)' "$TMP" | tail -70
cp -p "$TMP" "$F"
if ! php -l "$F"; then cp -p "$B/presupuestos_v3.php" "$F"; echo "ERROR: restaurado."; exit 1; fi
echo "=============================================="
echo " OK - Presupuestos V4.16.2 instalado"
echo " Detalle=verde | Costos/Presentación=gris"
echo " Convertir a venta=azul | Buscar alineado"
echo "=============================================="
