#!/usr/bin/env bash
set -e
cd /home/iotcuboc/pyme || exit 1

echo "=============================================="
echo " ElaboraPro Ventas V4.13.2"
echo " Botones y buscador - parche tolerante"
echo "=============================================="

F="public/ventas_v3.php"
[ -f "$F" ] || { echo "ERROR: no existe $F"; exit 1; }

TS=$(date +%Y%m%d_%H%M%S)
B="backups/elaborapro_ventas_v4_13_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"

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

function rx(&$s,$pattern,$replacement,$label){
    $out=preg_replace($pattern,$replacement,$s,1,$n);
    if($out===null || $n!==1){
        fwrite(STDERR,"ERROR patrón $label: coincidencias=$n\n");
        exit(1);
    }
    $s=$out;
}

/* Detalle: identificar por destino venta_editar */
rx(
    $s,
    '~<a\s+class=["\']badge["\']\s+href=["\']<\?=\s*BASE_URL\s*\?>/venta_editar_v3\.php\?id=<\?=\s*\(int\)\$r\[[\'"]id[\'"]\]\s*\?>["\']\s*>~i',
    '<a class="btn ep-sale-action ep-sale-detail" href="<?= BASE_URL ?>/venta_editar_v3.php?id=<?= (int)$r[\'id\'] ?>">',
    'Detalle'
);

/* Revisar stock: identificar por destino venta_stock_revisar */
rx(
    $s,
    '~<a\s+class=["\']badge["\']\s+href=["\']<\?=\s*BASE_URL\s*\?>/venta_stock_revisar_v3\.php\?id=<\?=\s*\(int\)\$r\[[\'"]id[\'"]\]\s*\?>["\']\s*>~i',
    '<a class="btn ep-sale-action ep-sale-review" href="<?= BASE_URL ?>/venta_stock_revisar_v3.php?id=<?= (int)$r[\'id\'] ?>">',
    'Revisar stock'
);

/*
 * Descontar stock:
 * buscar el <a> completo por el href ?descontar=, no por espacios/saltos.
 * Solo se sustituye el atributo class dentro de ese enlace.
 */
$pattern='~<a\b(?=[^>]*href=["\']<\?=\s*BASE_URL\s*\?>/ventas_v3\.php\?descontar=<\?=\s*\(int\)\$r\[[\'"]id[\'"]\]\s*\?>["\'])[^>]*>~is';
if(!preg_match($pattern,$s,$m)){
    fwrite(STDERR,"ERROR patrón Descontar stock: enlace no encontrado.\n");
    exit(1);
}
$tag=$m[0];
if(!preg_match('~class=["\'][^"\']*["\']~i',$tag)){
    fwrite(STDERR,"ERROR: enlace Descontar stock sin class.\n");
    exit(1);
}
$newTag=preg_replace(
    '~class=["\'][^"\']*["\']~i',
    'class="btn ep-sale-action ep-sale-stock"',
    $tag,
    1,
    $nClass
);
if($nClass!==1){
    fwrite(STDERR,"ERROR cambiando clase Descontar stock.\n");
    exit(1);
}
$s=preg_replace($pattern,addcslashes($newTag,'\\$'),$s,1,$nStock);
if($nStock!==1){
    fwrite(STDERR,"ERROR instalando clase Descontar stock.\n");
    exit(1);
}

/* Buscador: estructura diagnosticada */
rx(
    $s,
    '~<form\s+method=["\']get["\']\s+class=["\']no-print["\']\s+style=["\']margin:15px 0;display:flex;gap:10px;flex-wrap:wrap["\']\s*>~i',
    '<form method="get" class="no-print ep-sale-search">',
    'Buscador'
);

$css=<<<'HTML'

<style>
/* ELABORAPRO_VENTAS_V4_13_2 */
.op3-main .ep-sale-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;
}

/* Detalle = verde pastel */
.op3-main a.btn.ep-sale-detail{
    background:#BFE3C9 !important;
    border:1px solid #A8D5B5 !important;
    color:#205C36 !important;
}
.op3-main a.btn.ep-sale-detail:hover{
    background:#AEDAB9 !important;
    border-color:#9BCDAA !important;
    color:#205C36 !important;
}

/* Revisar stock = gris */
.op3-main a.btn.ep-sale-review{
    background:#F1F3F5 !important;
    border:1px solid #DCE3EA !important;
    color:#475569 !important;
}
.op3-main a.btn.ep-sale-review:hover{
    background:#E7EAEE !important;
    border-color:#CDD5DE !important;
    color:#334155 !important;
}

/* Descontar stock = azul pastel */
.op3-main a.btn.ep-sale-stock{
    background:#C9DCFA !important;
    border:1px solid #AFCBF8 !important;
    color:#174F9E !important;
}
.op3-main a.btn.ep-sale-stock:hover{
    background:#BBD3F8 !important;
    border-color:#9EBFF3 !important;
    color:#123F80 !important;
}

/* Buscar alineado con la barra */
.op3-main form.ep-sale-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;
}
.op3-main form.ep-sale-search input[name="q"]{
    flex:1 1 auto !important;
    width:auto !important;
    min-width:0 !important;
    margin:0 !important;
}
.op3-main form.ep-sale-search button.btn{
    flex:0 0 auto !important;
    width:auto !important;
    margin:0 !important;
}
@media(max-width:640px){
    .op3-main form.ep-sale-search{gap:8px !important;}
}
</style>

HTML;

$footer='~<\?php\s+render_footer_v3\(\);\s*\?>~';
if(preg_match_all($footer,$s)!==1){
    fwrite(STDERR,"ERROR: footer inesperado.\n");exit(1);
}
$s=preg_replace($footer,$css.'<?php render_footer_v3(); ?>',$s,1);

/* Validación final antes de escribir temporal */
foreach([
    'ELABORAPRO_VENTAS_V4_13_2',
    'ep-sale-detail',
    'ep-sale-review',
    'ep-sale-stock',
    'ep-sale-search',
    'venta_editar_v3.php?id=',
    'venta_stock_revisar_v3.php?id=',
    'ventas_v3.php?descontar=',
    '¿Descontar stock de esta venta?'
] as $needle){
    if(strpos($s,$needle)===false){
        fwrite(STDERR,"ERROR validación: $needle\n");exit(1);
    }
}

if(file_put_contents($f,$s)===false){
    fwrite(STDERR,"ERROR escribiendo temporal.\n");exit(1);
}
echo "OK: V4.13.2 preparado en temporal.\n";
PHP

echo
echo "===== LINT TEMPORAL ====="
php -l "$TMP"

echo
echo "===== VALIDACION BOTONES ====="
grep -n -B2 -A5 -E 'ep-sale-detail|ep-sale-review|ep-sale-stock' "$TMP"

echo
echo "===== VALIDACION BUSCADOR ====="
grep -n -B2 -A8 'ep-sale-search' "$TMP" | head -40

echo
echo "===== INSTALANDO ====="
cp -p "$TMP" "$F"

echo
echo "===== LINT FINAL ====="
if ! php -l "$F"; then
    echo "ERROR: restaurando respaldo..."
    cp -p "$B/ventas_v3.php" "$F"
    exit 1
fi

echo
echo "=============================================="
echo " OK - Ventas V4.13.2 instalado"
echo " Detalle         = verde pastel"
echo " Revisar stock   = gris"
echo " Descontar stock = azul pastel"
echo " Buscar          = alineado"
echo " Respaldo: /home/iotcuboc/pyme/$B"
echo "=============================================="
