<?php

require_once "./pdocontroller.php";
if (isset($_REQUEST['proyecto'])){$proyecto=$_REQUEST['proyecto'];}else{$proyecto="";}
if (isset($_REQUEST['rol'])){$rol=$_REQUEST['rol'];}else{$rol="";}
if (isset($_REQUEST['codemp'])){$codemp=$_REQUEST['codemp'];}else{$codemp="";}
if (isset($_REQUEST['codempresa'])){$codempresa=$_REQUEST['codempresa'];}else{$codempresa="";}
if (isset($_REQUEST['nommodulo'])){$nommodulo=$_REQUEST['nommodulo'];}else{$nommodulo="";}
if (isset($_REQUEST['accion'])){$accion=$_REQUEST['accion'];}else{$accion="";}
if (isset($_REQUEST['fuente'])){$accion=$_REQUEST['fuente'];}else{$fuente="";}
if (isset($_REQUEST['remision'])){$remision=$_REQUEST['remision'];}else{$remision="";}
if (isset($_REQUEST['codigo'])){$codigo=$_REQUEST['codigo'];}else{$codigo="";}
if (isset($_REQUEST['fecha'])){$fecha=$_REQUEST['fecha'];}else{$fecha="";}
if (isset($_REQUEST['tercero'])){$tercero=$_REQUEST['tercero'];}else{$tercero="";}
if (isset($_REQUEST['precio'])){$precio=$_REQUEST['precio'];}else{$precio="";}
//print_r($_POST);
$modulo=$nommodulo;
$DBclase="PDOCONTROLLER";
$DBconex=new $DBclase;
$syseli="Eliminado";
$primarykey="";
$primaryVlr="";
$tabladet="";
$query="select chkedi,listasql,tabla,tabqts,tabadi,tabdet,tabpgo,sqlinit,sqledit,sqllost,tabadi,datadi,proyecto,sqlres,sqlqst,chkint,sqltmp,sqlele,chkele,sqlsearch,tipo,reporte,tabele from modcmp where nommod= :modulo ";
$tipo="";
$reporte="";
$parametros=array(":modulo"=>$modulo);
$campostblgral= [];
$campostbladi = [];
try{
    $datos=$DBconex->executeconsulta($query,$parametros);
    //echo json_encode($datos);
    $tabadicional="";
    foreach($datos as $qdatos){
        $tabla=$qdatos["tabla"];
        $tipo=$qdatos["tipo"];
        $reporte=$qdatos["reporte"];
        $primarykey=$qdatos["chkedi"];//para verificar si tiene un campo primario
        $tabadicional=$qdatos["tabadi"];
        $tablapgo = $qdatos["tabpgo"];
        $tabladet = $qdatos["tabdet"];
        $tabconse=$qdatos["tabele"];
        $swEle=$qdatos["chkele"];
    }

    $query="select nombre as campo,nomcampo,tabla from moddet where modulo = :modulo ";
    $datos=$DBconex->executeconsulta($query,$parametros);

    

    foreach ($datos as $fila) {
        // Sanear datos antes de usarlos
        $campo = htmlspecialchars(trim($fila['campo']), ENT_QUOTES, 'UTF-8');
        $nomcampo = htmlspecialchars(trim($fila['nomcampo']), ENT_QUOTES, 'UTF-8');
        $tablas = explode(',', $fila['tabla']);
        //print_r($tablas);
        foreach ($tablas as $tablasearch) {
            $tablasearch = trim($tablasearch); // Eliminar espacios extra
            // Validar que la tabla esté permitida antes de agregar
            if (!in_array($tablasearch, [$tabla,$tabadicional], true)) {
                continue; // Si la tabla no es válida, omitirla
            }

            // Asignar los campos a la tabla correspondiente
            if ($tablasearch === $tabla) {
                
                $campostblgral[$campo] = $nomcampo;
            }
            if ($tablasearch === $tabadicional) {
                //echo $campo;
                $campostbladi[$campo] = $nomcampo;
            }
        }
    }
    //la primera parte se debe almacenar en carcmp, y debo tener el nombre del campo id que me identifica el Id en otras tablas 

 }catch(Exception $ex){
     echo $ex->getMessage();
     return;
 }

//echo $codemp.$modulo.$rol.$codemp;
if(($codemp!='' || $codempresa!='') && $modulo!='modulo' && $rol!='empleado' && $codemp!='DND' ){
    if($codemp!=''){
        $DBclase="PDO".$codemp;
    }else{
        $DBclase="PDO".$codempresa;
    }
}else{
    $DBclase="PDOCONTROLLER";
}
//echo $DBclase.$tabla;


$DBconex=new $DBclase;
$queryedit="";
$paramedi=[];
$parameters=[];
$values="";
if ($accion=='temp'){
    //echo $remision.$DBclase;
    //return;
    $query="insert into pedidodetalle(nrorem,codigo,cantidad,fecha,nriper,precio) values(:remision,:codigo,:cantidad,:fecha,:tercero,:precio)";
    $parameters = [":remision" => $remision,":codigo" => $codigo,":cantidad" => 1,":fecha" => $fecha,":tercero" => $tercero,":precio" => $precio];
    try{
        $datos=$DBconex->execute_insert($query,$parameters);
        //echo $datos;
        if($datos>0){
            //$query="select pedidodetalle.id,pedidodetalle.nrorem,pedidodetalle.codigo,invart.artdes,pedidodetalle.cantidad as Wn_cantidad,pedidodetalle.precio as Wn_precio,pedidodetalle.observacion as Wt_observacion from invart,pedidodetalle where pedidodetalle.codigo=invart.artcod and pedidodetalle.nrorem=:remision ";
            $query="select pedidodetalle.id,pedidodetalle.nrorem,pedidodetalle.codigo,invart.artdes,pedidodetalle.cantidad as Wn_cantidad,pedidodetalle.precio as Wn_precio,pedidodetalle.observacion as Wt_observacion from invart,pedidodetalle where pedidodetalle.codigo=invart.artcod and pedidetalle.estado!='Eliminado' and DATE(pedidetalle.fecha) = CURDATE() ";
            $parameters = [":remision" => $remision];
            try{
                $datos=$DBconex->executeconsulta($query,$parameters);
                header("Content-Type: application/json");
                echo json_encode($datos);
                return;
            }catch(Exception $ex){
                echo $ex->getMessage();
            }
        }
    }catch(Exception $ex){
        echo $ex->getMessage();
    }

    return;
}else{
    $sqlquery="select * from ".$tabla." where ".$primarykey."= :primary ";
    $query="insert into ".$tabla."(";
}

$parametrosOtraTabla = [];
$parametros=[];
$parameter=[];
$queryOtraTabla="";
$valuesOtraTabla="";
$queryeditadi="";
$items="";
// ESTO ES PARA CUANDO RECIBO FORMULARIO
file_put_contents("debug_log.txt", print_r($_POST, true));

$sw=0;
/*if (!empty($_POST)) {
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";
} else {
    echo "No se recibieron datos.";
}*/
//$vItems=json_decode($_POST['items'], true);
$items_json = $_POST['items']; // Esto es un string JSON
$items = json_decode($items_json, true); // Lo convertís a array

$pagos_json= $_POST['pagos']; // Esto es un string JSON
$pagos = json_decode($pagos_json, true); // Lo convertís a array
//print_r($pagos);
$fuente='';
foreach ($_POST as $campo => $valor) {
    if (in_array($campo, ["nommodulo", "codempresa", "codemp","items","pagos"])) {
        continue; // Omitimos estos campos específicos
    }
    
    
        // Si el campo es la clave primaria, almacenamos su valor
        //echo $campo.' * '.$valor;
        if ($campo == $primarykey) {
            
            $primaryVlr = $valor;
            if($campo=="Id"){
                continue; //revisar si requiere continuar o no segun la logica
            }
            
        }
        if ($campo == 'codfte') {
            $fuente=$valor;
        }

        if (substr($campo, 0, 3) == 'chk') {
            $valor = isset($_POST[$campo]) ? $_POST[$campo] : '';
            //echo $valor;

            // Normalizar a minúsculas para comparación
            $valorNormalizado = strtolower(trim($valor));
            //echo $valorNormalizado;

            if ($valorNormalizado === 'sí' || $valorNormalizado === 'si' || $valorNormalizado === 'true' || $valor === true) {
                $valor = 1;
            } elseif ($valorNormalizado === 'no' || $valorNormalizado === 'false' || $valor === false) {
                $valor = 0;
            } elseif (is_string($valor)) {
            // Remover separadores de miles (coma o punto)
                $valor = str_replace([',', '.'], '', $valor);
            }
        }


        // Si el campo está en `$campostblgral`, lo agregamos a la consulta principal
        if (in_array($campo, $campostblgral)) {
            $parametros[":$campo"] = $valor;
            //echo $campo;
            if (!empty($queryedit) and $campo!=$primarykey and $campo!='Id') {
                $queryedit .= ", ";
            }
            if($campo!=$primarykey){
                $queryedit .= "$campo = :$campo";
                $paramedi[":".$campo]=$valor;
            }
            if ($sw != 0) {
                $query .= ", ";
                $values .= ", ";
            }

            $query .= $campo;
            $values .= ":$campo";

            $sw = 1;
        }
        
        // Si el campo pertenece a la otra tabla, lo almacenamos en otro array
        if (in_array($campo, $campostbladi)) {
            $parametrosOtraTabla[":$campo"] = $valor;
            
            if (!empty($queryeditadi) and $campo!=$primarykey and $campo!='Id') {
                $queryeditadi .= ", ";
            }
            if($campo!=$primarykey){
                $queryeditadi .= "$campo = :$campo";
            }

            if (!empty($queryOtraTabla)) {
                $queryOtraTabla .= ", ";
                $valuesOtraTabla.= ", ";
            }
            $queryOtraTabla .= "$campo ";
            $valuesOtraTabla.= ":$campo";
        }
 
}
//echo    $primaryVlr;
//echo $query;

$swArchivos="";
if (isset($_FILES['images']) && $_FILES['images']['error'][0] == 0) {
    // Extensiones permitidas
    $allowed = ['jpg', 'jpeg', 'png', 'gif','webp', 'pdf', 'doc', 'docx', 'xls', 'xlsx']; 
    // Tipos MIME permitidos
    $allowedMimeTypes = [
        'image/jpeg', 'image/png', 'image/gif', 'image/webp',
        'application/pdf',
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    ];


     $fileCount = count($_FILES['images']['name']);
     //$folderName = uniqid('img_', true); //este era solo para indicar imagenes
     $folderName = uniqid('files_', true); 
     $folderNameParts = explode('.', $folderName);
     $folderName = $folderNameParts[0];
 
     $cDir="../archivos/".strtolower($codempresa);

     if(is_dir($cDir)){
     }else{
         mkdir($cDir,0777);
     }
     $cDir=$cDir."/".strtolower($modulo);
     if(is_dir($cDir)){
     }else{
         mkdir($cDir,0777);
     }
    $cDir=$cDir."/".$folderName;
    $folderPath = $cDir;

    if(is_dir($folderPath)){
	}else{
		mkdir($folderPath,0777);
	}
    
    for ($i = 0; $i < $fileCount; $i++) { 
        $fileName = $_FILES['images']['name'][$i]; 
        $fileTmpName = $_FILES['images']['tmp_name'][$i]; 
        $fileSize = $_FILES['images']['size'][$i]; 
        $fileError = $_FILES['images']['error'][$i]; 
        $fileType = $_FILES['images']['type'][$i]; 
       // echo $fileName;
        $parts = explode('.', $fileName);
        
        //$fileExt = end($parts); // Esto es correcto
        $fileExt = strtolower(end($parts));

            
        if (in_array($fileExt, $allowed) && in_array($fileType, $allowedMimeTypes)) {
            if ($fileError === 0) { 
                if ($fileSize < 5000000) { // Limitar el tamaño del archivo a 5MB 
                    $fileNewName = uniqid('', true) . "." . $fileExt; 
                    //$fileDestination = $folderPath . '/' . $fileNewName; 
                    //$fileDestination = $folderPath . '/' . $fileName;//conserva nombre original
                    $safeFileName = preg_replace('/[^a-zA-Z0-9._-]/', '_', $fileName);//Para darle mas seguridad
                    $fileDestination = $folderPath . '/' . $safeFileName;

                    move_uploaded_file($fileTmpName, $fileDestination); 
                    //echo "El archivo $fileNewName almacenado."; 
                    echo "El archivo $safeFileName se ha almacenado correctamente.<br>";
                } else { 
                    //echo "El archivo $fileName es demasiado grande."; 
                    //echo "El archivo $fileName excede el tamaño máximo permitido de 5MB.<br>";
                    die("El archivo $fileName excede el tamaño permitido de 5MB.");
                    
                } 
            } else { 
                echo "Hubo un error al subir el archivo $fileName. Código de error: $fileError.<br>";
            } 
        } else { 
            //echo "No se permiten archivos de tipo $fileExt."; 
            //echo "El archivo $fileName tiene una extensión o tipo no permitido ($fileExt / $fileType).<br>";
            
        } 

    }
    $query=$query.',archivos';
    $values=$values.",:archivos";
    $parametros[":archivos"]=$folderName;
    $queryedit=$queryedit.',archivos= :archivos';
    $swArchivos=1;
    
    
}
if($swEle==1){//Para cuando son documentos electronicos; debemos ingresar y obtener el consecutivos
    // Generar un código único para el registro
    $codigo_unico = uniqid("COD_", true);
    //En proxima version, se debe obtener esta resolucion, desde el mismo modulo, cuando la busqueda sea similar a un select visualmente, de tal forma que traiga fuente, prefijo y resolucion y sede
    // === CONSULTA RESOLUCIÓN ===
    if ($fuente !== 'FE') {
        $resultado = conse($DBconex, $fuente, 6);
        $prefijo="ENV";
        $nrocrudo = $resultado; // entero, ej: 1
        $numfel=$nrocrudo;
        // Armar nrocmp: FAC000001
        $nrocmp = $prefijo . str_pad((string)$nrocrudo, 6, '0', STR_PAD_LEFT);

        // Asignar valores a los parámetros para siguiente uso
        $query .= ", nrorem, prefel, numfel, resfel, codsed, nrocmp";
        $values .= ", :nrorem, :prefel, :numfel, :resfel, '001', :nrocmp ";
         

        $parametros[":nrorem"] = $codigo_unico;
        $parametros[":prefel"] = $prefijo;
        $parametros[":numfel"] = $numfel;
        $parametros[":resfel"] = 'N.A';
        $parametros[":nrocmp"] = $prefijo.$numfel;


    }else{

        $queryRes = "SELECT preres as prefijo,nrores as resolucion FROM actres WHERE estres != 'Inactiva' and codfte='FE' LIMIT 1";
        $resDatos = $DBconex->executeconsulta($queryRes);

        if (!is_array($resDatos) || count($resDatos) === 0) {
            throw new Exception("No se encontró resolución activa .");
        }

        $prefijo = $resDatos[0]['prefijo'];
        $resolucion = $resDatos[0]['resolucion'];
        // Definir los datos en un array (vector)
        $parametrosConse = [
            "nrorem" => $codigo_unico,
            "codfte" => $fuente,
            "fchcmp" => date("Y-m-d"),
            "codsed" => "001",
            "prefijo" => $prefijo,
            "resolucion" => $resolucion 
        ];

    // Consulta SQL para insertar los datos
    $queryConse = "INSERT INTO $tabconse(nrorem, codfte, fchcmp, codsed, prefijo, resolucion) 
          VALUES (:nrorem, :codfte, :fchcmp, :codsed, :prefijo, :resolucion)";

    //echo $queryConse;
    // Ejecutar la inserción usando la clase DBconex
    $datos=$DBconex->execute_insert($queryConse,$parametrosConse);
    if($datos>0){
        //echo $codigo_unico;
        // Consulta para recuperar el ID basado en el código único recién insertado
        $queryLastId = "SELECT Id FROM $tabconse WHERE nrorem = :codigo_unico LIMIT 1";
         $datosId = $DBconex->executeconsulta($queryLastId, [":codigo_unico" => $codigo_unico]);
        //echo $codigo_unico;
        if ($datosId && count($datosId) > 0) {
            $numfel = $datosId[0]["Id"]; // <-- Aquí sí estás obteniendo el ID correctamente
            
            //$prefijo = "FELJ";
            //$resolucion = 18764091839001;

            // Asignar valores a los parámetros para siguiente uso
            $query .= ", nrorem, prefel, numfel, resfel, codsed, nrocmp";
            $values .= ", :nrorem, :prefel, :numfel, :resfel, '001', :nrocmp ";

            $parametros[":nrorem"] = $codigo_unico;
            $parametros[":prefel"] = $prefijo;
            $parametros[":numfel"] = $numfel;
            $parametros[":resfel"] = $resolucion;
            $parametros[":nrocmp"] = $prefijo.$numfel;
            
        } else {
            echo "❌ No se encontró el ID del consecutivo insertado";
        }

    }
    
    }
    //Al obtener el Id debo obtener 
}

$query=$query.") value(".$values.")";
$queryOtraTabla='insert into '.$tabadicional.'('.$queryOtraTabla.') values('.$valuesOtraTabla.')';
//echo 'prima'.$primarykey;
//echo $query;
//print_r($parametros);
//echo $sqlquery;//query consulta si existe registro
if(strlen($primarykey)>0 && !empty($primaryVlr)){
    //echo $primarykey;
    //echo "valor ".$primaryVlr;
    $queryedit=" update ".$tabla." set ".$queryedit." where ".$primarykey."= :primary ";
    //$parameter=array(":primary"=>$primaryVlr);
    $parameter[":primary"]=$primaryVlr;
    //echo $queryedit;

    
    try{
        $datos=$DBconex->executeconsulta($sqlquery,$parameter);
        //header("Content-Type: application/json");
        //echo json_encode($datos);
       
        if(is_integer($datos)){
             echo "ocurrio un error";
             return;
        }else{
            if(isset($datos) && !empty($datos) && sizeof($datos)>0){

                $paramedi[":primary"]=$primaryVlr;
                if($swArchivos==1){
                    $paramedi[":archivos"]=$folderName;
                }
                //print_r($paramedi);    
                try{
                    $datos=$DBconex->execute_update($queryedit,$paramedi);
                    echo "entra";
                    if($datos>0){
                        echo "Registro ".$datos." actualiza satisfactoriamente"; 
                    }
                }catch(Exception $ex){
                    echo $ex->getMessage();
                }
            }else{
                try{
                    echo $query;
                    
                    $datos=$DBconex->execute_insert($query,$parametros);
                    echo "Registro ".$datos." almacenado satisfactoriamente 4"; 
                    if($datos>0){
                        $id_encabezado = $datos;
                        
                    }
                }catch(Exception $ex){
                    echo $ex->getMessage();
                }
            }
            if(!empty($tabadicional) && !empty($queryeditadi) && !empty($primarykey)){
                $queryeditadi="update ".$tabadicional." set ".$queryeditadi." where ".$primarykey."= :primary ";
                // Verifica si el ID ya existe en la base de datos
                // Consulta para verificar si ya existe el registro
                $sqlCheck = "SELECT COUNT(*) FROM $tabadicional WHERE $primarykey = :primary";
                $datos = $DBconex->executeconsulta($sqlCheck, $parameter);

                if (is_array($datos) && count($datos) > 0 && $datos[0]["COUNT(*)"] > 0) {
                    // Existe el registro: se hace UPDATE   
                    //echo "Entra update: " . $queryeditadi;

                    $parametrosOtraTabla[":primary"] = $primaryVlr;
                    // Recorremos el array para encontrar y eliminar la clave que coincida con $primarykey
                    foreach ($parametrosOtraTabla as $key => $value) {
                        if (ltrim($key, ':') === $primarykey) {
                            unset($parametrosOtraTabla[$key]);
                            break; // Si solo hay una coincidencia, podemos salir
                        }
                    }
                    print_r($parametrosOtraTabla);

                    $datos = $DBconex->execute_update($queryeditadi, $parametrosOtraTabla);
                    if ($datos > 0) {
                        echo "Registro $datos actualizado satisfactoriamente.";
                    }

                } else {
                    // No existe: se hace INSERT
                    try {
                    //echo $queryOtraTabla;

                    $datos = $DBconex->execute_insert($queryOtraTabla, $parametrosOtraTabla);
        echo $datos;

        if ($datos > 0) {
            echo "Registro $datos almacenado satisfactoriamente en tabadi.";
        }
    } catch (Exception $ex) {
        echo "Error al insertar: " . $ex->getMessage();
    }
}


            }
            
        }

    }catch(Exception $ex){
         echo $ex->getMessage();
    }
}else{
    //echo $query;
    //print_r($parametros);
    try{
        //echo $query;
        $datos=$DBconex->execute_insert($query,$parametros);
        //echo 'sql insert '.$datos;
        if($datos>0){
            $id_encabezado = $datos;
           // Recorrer cada pago para armar el INSERT dinámico para detalle de pagos
            foreach ($pagos as $pago) {
                $pago['idfactura'] = $id_encabezado; // ✅ agrega idfactura también

                $campos = array_keys($pago);
                $placeholders = array_map(function($campo) {
                    return ':' . $campo;
                }, $campos);

                $query = "INSERT INTO $tablapgo (" . implode(", ", $campos) . ") VALUES (" . implode(", ", $placeholders) . ")";

                $parametros = [];
                foreach ($pago as $campo => $valor) {
                    $parametros[":" . $campo] = $valor;
                }
                //echo $query;
                try {
                    $resultado = $DBconex->execute_insert($query, $parametros);

                    if ($resultado) {
                    //echo "✅ Pago insertado correctamente<br>";
                    } else {
                    //echo "❌ Error al insertar pago<br>";
                    }
                } catch (Exception $ex) {
                    echo $ex->getMessage();
                }
             }

            // Recorrer cada ítem para armar el INSERT dinámico para detalle de productos
            foreach ($items as $item) {
                $item['idfactura'] = $id_encabezado;
            
                $campos = array_keys($item);
                $placeholders = array_map(function($campo) {
                    return ':' . $campo;
                }, $campos);
                
                
                $query = "INSERT INTO $tabladet (" . implode(", ", $campos) . ") VALUES (" . implode(", ", $placeholders) . ")";
                
                //echo $query;
                $parametros = [];
                foreach ($item as $campo => $valor) {
                    $parametros[":" . $campo] = $valor;
                }
                //echo $query;
                //print_r($parametros);
                try{
                    $resultado = $DBconex->execute_insert($query, $parametros);
            
                    if ($resultado) {
                        //echo "✅ Insert realizado<br>";
                    } else {
                        //echo "❌ Error al insertar<br>";
                    }
                }catch(Exception $ex){
                    echo $ex->getMessage();
               }
            }
            // Si el módulo es fventasjhoyos, se llama a la API
            if ($modulo === "fventasjhoyos" and $fuente === "FE") {
                //$url = "api_factura_fe.php";
                $url = "http://localhost/empire/MVC/pdo/api_factura_fe.php";
                $postData = [
                    'idfactura' => $id_encabezado,
                    'codemp'    => $codempresa
                ];

                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 10 segundos de timeout
                $response = curl_exec($ch);

                if (curl_errno($ch)) {
                    echo json_encode(["error" => curl_error($ch)]);
                    curl_close($ch);
                    return;
                }

                curl_close($ch);

                $json = json_decode($response, true);

                if (json_last_error() !== JSON_ERROR_NONE) {
                    echo json_encode(["error" => "Respuesta JSON inválida de la API"]);
                    return;
                }

                if (isset($json["success"])) {
                    echo $json["rutaFE"]; // Aquí puedes redirigir o mostrar
                } else {
                    echo $json["error"] ?? "Error desconocido al procesar FE";
                }

                return; // Ya se imprimió salida, se corta aquí
            }

            // Para otros módulos
            echo "Registro " . $id_encabezado . " almacenado satisfactoriamente 5";
                  
        }
    }catch(Exception $ex){
        echo $ex->getMessage();
    }
}

function conse($DBconex, string $namdbf, int $lenStr): string {
    // Preparar el nombre con trim, upper y relleno a 25 caracteres
    $namdbf = strtoupper(trim($namdbf));
    $namdbf = str_pad($namdbf, 25, ' ');

    // Buscar si ya existe el registro en actids
    $query = "SELECT nroids FROM actids WHERE namdbf = :namdbf";
    $row = $DBconex->executeconsulta($query, [":namdbf" => $namdbf]);

    if ($row && count($row) > 0) {
        // Si existe, incrementar
        $nNroIds = $row[0]['nroids'] + 1;

        $update = "UPDATE actids SET nroids = :nroids WHERE namdbf = :namdbf";
        $DBconex->execute_update($update, [
            ':nroids' => $nNroIds,
            ':namdbf' => $namdbf
        ]);
    } else {
        // Si no existe, insertar con valor 1
        $nNroIds = 1;

        $insert = "INSERT INTO actids (namdbf, nroids) VALUES (:namdbf, :nroids)";
        $DBconex->execute_insert($insert, [
            ':namdbf' => $namdbf,
            ':nroids' => $nNroIds
        ]);
    }

    return $nNroIds;
    // Retornar como string con ceros a la izquierda
    //return str_pad(strval($nNroIds), $lenStr, '0', STR_PAD_LEFT);
}

?>