<?php

require_once WP_PLUGIN_DIR . '/nichecreator/includes/libraries/action-scheduler/action-scheduler.php';
require_once( ABSPATH . 'wp-includes/pluggable.php' );
require_once plugin_dir_path(__FILE__).'../includes/funcionesduplicacion.php';
//$user_query = new WP_User_Query( array( 'role' => 'Administrator','number'=>1) );
//$userid = $user_query->results[0]->data->ID;

function check_imagenes()
{
	if (isset($_POST['pararproceso']))
	{
	$resultado = as_unschedule_all_actions('cargar_imagenes');
	$resultado = as_unschedule_all_actions('cargar_imagenesia');
	$resultado = as_unschedule_all_actions('cargar_imagenescat');
	}
	
	if (isset($_POST['lanzarimagenesia']))
	{
		if (!wp_verify_nonce($_POST['_wpnonce'], 'imagenesia'.get_the_ID())) 
			{
			add_action('admin_notices','mostrar_error');
			}
		else // OK, seguimos...
			{
			$userid = get_current_user_id();
			set_current_user($userid);
			$gen_fichas = $_POST["gen_fichas"] ?? 0;
			$gen_cats = $_POST["gen_cats"] ?? 0;
			$sobreimagen = $_POST["sobreimagen"];
			$personalizar_prompt_fichas = $_POST["personalizar_prompt_fichas"] ?? 0;
			$prompt_fichas = $_POST["prompt_fichas"];
			$personalizar_prompt_cats = $_POST["personalizar_prompt_cats"] ?? 0;
			$prompt_cats = $_POST["prompt_cats"];
			$herramienta = $_POST["herramienta"];
			$offsetia = $_POST['offsetia'];
			$contadoria = $_POST['contadoria'];
			$contadorfichasblanco = $_POST['contadorfichasblanco'];
			$contadorcats = $_POST['contadorcats'];
			$catpags = $_POST['catpagas'] ?? 'paginas';
			$contadorfinal = 0;
			if ($gen_fichas)
				{
				if ($sobreimagen == 'todas')
					$contadorfinal += $contadoria;
				else $contadorfinal += $contadorfichasblanco;
				}
			if ($gen_cats)
				$contadorfinal += $contadorcats;
			if (($gen_fichas && $contadoria ) && ($gen_cats && $contadorcats))
				$valores = 'todos';
			elseif ($gen_fichas && $contadoria )
				$valores = 'imagenes';
			else $valores = 'imagenescat';
			//update_option('nichecreator_offsetimagenesia',$offsetia,true);
			//update_option('nichecreator_sobreimagen',$sobreimagen,true);
			wp_enqueue_style('wp-jquery-ui-dialog');
			wp_register_script( 'carga-imagenes', plugins_url('../js/comprobarimagenes.js',__FILE__), array('jquery','jquery-ui-dialog','wp-i18n'), '1.0', true );
			wp_set_script_translations( 'carga-imagenes', 'nichecreator', plugin_dir_path(__FILE__) . '../languages' );
			$arr = array( 'ajaxurl' => plugins_url('../includes/comprobarimagenes.php',__FILE__),'offset'=>$offsetia,'contador'=>$contadorfinal,'valores'=>$valores);
			wp_localize_script('carga-imagenes','obj',$arr ); 
			wp_enqueue_script( 'carga-imagenes');
			add_action( 'wp_loaded', 'schedule_cargar_imagenes_ia',99 );
			}
	}
	if (isset($_POST['lanzarimagenescat']))
	{
		if (!wp_verify_nonce($_POST['_wpnonce'], 'imagenescat'.get_the_ID())) 
			{
			add_action('admin_notices','mostrar_error');
			}
		else // OK, seguimos...
			{
			$userid = get_current_user_id();
			set_current_user($userid);
			$offsetcats = $_POST['offsetcats'];
			//update_option('nichecreator_offsetimagenescats',$offsetcats,true);
			$catpags = $_POST['catpags'];
			update_option('nichecreator_catpags',$catpags,true);
			if ($catpags == 'categorias')
				$contadorcats = wp_count_terms(array('taxonomy'=>'category','hide_empty'=>false));
			else 
				{
				$args = array('post_type' => 'page',"meta_key"=>"nichecreator_categoria","posts_per_page"=> -1,"post_status"=>'any');
				$categorias = new WP_Query($args);
				$contadorcats = $categorias->found_posts;
				}
			/*$contadorcats = $_POST['contadorcats'];*/
			wp_enqueue_style('wp-jquery-ui-dialog');
			wp_register_script( 'carga-imagenes', plugins_url('../js/comprobarimagenes.js',__FILE__), array('jquery','jquery-ui-dialog','wp-i18n'), '1.1', true );
			wp_set_script_translations( 'carga-imagenes', 'nichecreator', plugin_dir_path(__FILE__) . '../languages' );
			$arr = array( 'ajaxurl' => plugins_url('../includes/comprobarimagenes.php',__FILE__),'offset'=>$offsetcats,'contador'=>$contadorcats);
			wp_localize_script('carga-imagenes','obj',$arr ); 
			wp_enqueue_script( 'carga-imagenes');
			add_action( 'wp_loaded', 'schedule_cargar_imagenes_cat',99 );
			}
	}
}
add_action('init','check_imagenes');

function schedule_cargar_imagenes() 
{
	$autor = $_POST['autor'];
	$gen_fichas = $_POST["gen_fichas"] ?? 0;
	$gen_cats = $_POST["gen_cats"] ?? 0;
	$sobreimagen = $_POST["sobreimagen"];
	$personalizar_prompt_fichas = $_POST["personalizar_prompt_fichas"] ?? 0;
	$prompt_fichas = $_POST["prompt_fichas"];
	$personalizar_prompt_cats = $_POST["personalizar_prompt_cats"] ?? 0;
	$prompt_cats = $_POST["prompt_cats"];
	$herramienta = $_POST["herramienta"];
	$offsetia = $_POST['offsetia'];
	$contadoria = $_POST['contadoria'];
	$contadorfichasblanco = $_POST['contadorfichasblanco'];
	$contadorcats = $_POST['contadorcats'];
	$catpags = $_POST['catpagas'] ?? 'paginas';
	$contador = 0;
	if ($gen_fichas)
		{
		if ($sobreimagen == 'todas')
			$contador += $contadoria;
		else $contador += $contadorfichasblanco;
		}
	if ($gen_cats)
		$contador += $contadorcats;	
	
	for ($i=1;$i<=$contador;$i=$i+$offsetia)
	{
		//	if ( false === as_has_scheduled_action( 'cargar_imagenes' ) ) {
		$inicio = $i;
		$fin = $inicio + $offsetia;
		if ($fin > $contador )
			$fin = $contador;
		//$datos = base64_encode(gzcompress(serialize($_POST), 9));
		$ejecucion = as_enqueue_async_action('cargar_imagenes', array($contador,$inicio,$offset,$autor),'',false);
		if ($ejecucion)
			{
			$transient = 'carga_imagenes_'.$inicio;
			set_transient( $transient, $ejecucion, 60*60*12 );
			}
		//}
	}
}

add_action('cargar_imagenes', 'fun_cargar_imagenes',10,4);

function schedule_cargar_imagenes_ia() 
{
	$autor = $_POST['autor'];
	$gen_fichas = $_POST["gen_fichas"] ?? 0;
	$gen_cats = $_POST["gen_cats"] ?? 0;
	$sobreimagen = $_POST["sobreimagen"];
	$personalizar_prompt_fichas = $_POST["personalizar_prompt_fichas"] ?? 0;
	$prompt_fichas = $_POST["prompt_fichas"] ?? '';
	$personalizar_prompt_cats = $_POST["personalizar_prompt_cats"] ?? 0;
	$prompt_cats = $_POST["prompt_cats"] ?? '';
	$herramienta = $_POST["herramienta"];
	$offset = $_POST['offsetia'];
	$contadoria = $_POST['contadoria'];
	$contadorfichasblanco = $_POST['contadorfichasblanco'];
	$contadorcats = $_POST['contadorcats'];
	$catpags = $_POST['catpagas'] ?? 'paginas';
	if ($prompt_fichas == '')
		$prompt_fichas = "Dame una imagen lo más relacionada posible con %nombre - %keyword";
	if ($prompt_cats == '')
		{
		$keyword = get_option('nichecreator_keyword','');
		if ($keyword != '')
		    $prompt_cats = "Dame una imagen lo más relacionada posible con $keyword %categoria";
		}
	$contador = 0;
	if ($gen_fichas)
		{
		if ($sobreimagen == 'todas')
			$contador = $contadoria;
		else $contador = $contadorfichasblanco;
		}
	// LLamdas para fichas....
	for ($i=1;$i<=$contador;$i=$i+$offset)
	{
		$inicio = $i;
		$fin = $inicio + $offset;
		if ($fin > $contador )
			$fin = $contador;
		//$datos = base64_encode(gzcompress(serialize($_POST), 9));
		$ejecucion = as_enqueue_async_action('cargar_imagenesia', array($contador,$inicio,$offset,$autor,$herramienta,$prompt_fichas,$sobreimagen),'',false);
		if ($ejecucion)
			{
			$transient = 'carga_imagenes_'.$inicio;
			set_transient( $transient, $ejecucion, 60*60*12 );
			}
	}
	 $contador = 0;
	 if ($gen_cats)
		{
		$contador = $contadorcats;
		// LLamada para categorías...
		}
	for ($i=1;$i<=$contador;$i=$i+$offset)
	{
		$inicio = $i;
		$fin = $inicio + $offset;
		if ($fin > $contador )
			$fin = $contador;
		//$datos = base64_encode(gzcompress(serialize($_POST), 9));
		$ejecucion = as_enqueue_async_action('cargar_imagenescat', array($contador,$inicio,$offset,$autor,$herramienta,$prompt_cats),'',false);
		if ($ejecucion)
			{
			$transient = 'carga_imagenescat_'.$inicio;
			set_transient( $transient, $ejecucion, 60*60*12 );
			}
	}
}
add_action('cargar_imagenesia', 'fun_cargar_imagenes_ia',10,7);
add_action('cargar_imagenescat', 'fun_cargar_imagenes_cat',10,6);

function schedule_cargar_imagenes_cat() 
{
	//$contador = $_POST['contadorcats'];
	$offset = $_POST['offsetcats'];
	$autor = $_POST['autorcats'];
	$prompt = $_POST['textopropiocats'];
	$herramienta = $_POST['herramienta'];
	$catpags = $_POST['catpags'];
			if ($catpags == 'categorias')
				$contador = wp_count_terms(array('taxonomy'=>'category','hide_empty'=>false));
			else 
				{
				$args = array('post_type' => 'page',"meta_key"=>"nichecreator_categoria","posts_per_page"=> -1,"post_status"=>'any');
				$categorias = new WP_Query($args);
				$contador = $categorias->found_posts;
				}
	if ($prompt == '')
	 	return;
	for ($i=1;$i<=$contador;$i=$i+$offset)
	{
		//	if ( false === as_has_scheduled_action( 'cargar_imagenes' ) ) {
		$inicio = $i;
		$fin = $inicio + $offset;
		if ($fin > $contador )
			$fin = $contador;
		//$datos = base64_encode(gzcompress(serialize($_POST), 9));
		$ejecucion = as_enqueue_async_action('cargar_imagenescat', array($contador,$inicio,$offset,$autor,$prompt,$catpags,$herramienta),'',false);
		if ($ejecucion)
			{
			$transient = 'carga_imagenes_'.$inicio;
			set_transient( $transient, $ejecucion, 60*60*12 );
			}
		//}
	}
}

function fun_cargar_imagenes($contador,$inicio,$offset,$autor)
{
//ini_set('max_execution_time', '60');
$url = site_url();
$parse = parse_url($url);
$mydomain = $parse['host'];
//$_POST = unserialize(gzuncompress(base64_decode($datos)));
global $wpdb;
$tabla = $wpdb->prefix.'niche_tabla';
$ini = $inicio - 1;
$fin = $inicio + $offset;
if ($fin > $contador )
	$offset = $contador - $ini;
$offset = intval($offset);
$ini = intval($ini);
usuario_upload_image();
$query = $wpdb->prepare("SELECT * FROM $tabla LIMIT %d OFFSET %d", $offset, $ini);
$entradas = $wpdb->get_results($query);
foreach ($entradas as $entrada)
	{
	if (is_string($entrada->OrganizationHeadPhotoURL) && trim($entrada->OrganizationHeadPhotoURL) !== '') {
    		$url = parse_url($entrada->OrganizationHeadPhotoURL);
    		$dominio = $url['host'] ?? '';
			}
	if ($entrada->OrganizationHeadPhotoURL != '' && $mydomain != $dominio) // Metemos la foto en el sistema y actualizamos la tabla.
		{
		$fotoid = upload_file_url($entrada->OrganizationHeadPhotoURL,$entrada->OrganizationName,$autor,'noia');
		if ($fotoid > 0) // Hemos subido foto y no hay error o la foto ya estaba...
			{
			update_post_meta( $fotoid, 'nichecreator_imagen', 'X' );
			$fotourl = wp_get_attachment_url($fotoid);
			//$entrada->OrganizationHeadPhotoURL = $fotourl;
			// Actualizamos la propia entrada con la URL de la foto en nuestro servidor...
			$id = intval($entrada->id);
			$actualizacion = $wpdb->update($tabla,array("OrganizationHeadPhotoURL"=>$fotourl),array("id"=>$entrada->id));
			}
		elseif ($fotoid === false)
			{
			$id = intval($entrada->id);
			$actualizacion = $wpdb->update($tabla,array("OrganizationHeadPhotoURL"=>''),array("id"=>$entrada->id));
			}
		}
	}
}

function fun_cargar_imagenes_ia($contador,$inicio,$offset,$autor,$herramienta,$prompt,$sobreimagen)
{
ini_set('max_execution_time', '60');
//$url = site_url();
//$parse = parse_url($url);
//$mydomain = $parse['host'];
//$_POST = unserialize(gzuncompress(base64_decode($datos)));
global $wpdb;
$tabla = $wpdb->prefix.'niche_tabla';
$ini = $inicio - 1;
$fin = $inicio + $offset;
if ($fin > $contador )
	$offset = $contador - $ini;
$ini = intval($ini);
$offset = intval($offset);
if ($sobreimagen == 'todas')
	$entradas = $wpdb->get_results("SELECT * FROM $tabla LIMIT $offset OFFSET $ini");
elseif ($sobreimagen == 'blanco')
	$entradas = $wpdb->get_results("SELECT * FROM $tabla WHERE OrganizationHeadPhotoURL = '' LIMIT $offset OFFSET $ini");
usuario_upload_image();
foreach ($entradas as $entrada)
   {
	$promptx = reemplazar($prompt,$entrada);
	if ($herramienta == 'openai')
		$urlimagen = opendalle2($promptx);
	elseif ($herramienta == 'replicate')
		$urlimagen = replicate($promptx);
	if ($urlimagen == '')
				break;
	$fotoid = upload_file_url($urlimagen,$entrada->OrganizationName,$autor);
	if ($fotoid > 0) // Hemos subido foto y no hay error o la foto ya estaba...
		{
		update_post_meta( $fotoid, 'nichecreator_imagen', 'X' );
		$fotourl = wp_get_attachment_url($fotoid);
		//$entrada->OrganizationHeadPhotoURL = $fotourl;
		// Actualizamos la propia entrada con la URL de la foto en nuestro servidor...
		$actualizacion = $wpdb->update($tabla,array("OrganizationHeadPhotoURL"=>$fotourl),array("id"=>$entrada->id));
		}
	elseif ($fotoid === false)
		$actualizacion = $wpdb->update($tabla,array("OrganizationHeadPhotoURL"=>''),array("id"=>$entrada->id));
   }
}


function fun_cargar_imagenes_cat($contador,$inicio,$offset,$autor,$herramienta,$prompt)
{
ini_set('max_execution_time', '60');
//$_POST = unserialize(gzuncompress(base64_decode($datos)));
global $wpdb;
$ini = $inicio - 1;
$fin = $inicio + $offset;
if ($fin > $contador )
	$offset = $contador - $ini;
usuario_upload_image();
    // Ahora procede con la subida
	$args = array('post_type' => 'page',"meta_key"=>"nichecreator_categoria","posts_per_page"=> $offset,"offset"=>$ini,"post_status"=>'any');
	$entradas = new WP_Query($args);
		for ($secuencia = 0;$secuencia < $offset; $secuencia++)
		{
		$nombre = $entradas->posts[$secuencia]->post_name;
		$id = $entradas->posts[$secuencia]->ID;
		/*
		$padreid = wp_get_post_parent_id($id);
		if ($padreid)
			{
   			$padre = get_post($padreid);
   			$padrenombre = $padre->post_name;
   			}
   		else $padrenombre = '';
		*/
		$promptx = reemplazarcats($prompt,$nombre);
		if ($herramienta == 'openai')
			$urlimagen = opendalle2($promptx);
		elseif ($herramienta == 'replicate')
			$urlimagen = replicate($promptx);
		if ($urlimagen == '')
				break;
		$fotoid = upload_file_url($urlimagen,$nombre,$autor);
		if ($fotoid > 0) // Hemos subido foto y no hay error o la foto ya estaba...
				{
				update_post_meta( $fotoid, 'nichecreator_imagen', 'X' );
				set_post_thumbnail( $id, $fotoid );
				}
		}
}


/**
 * Upload image from URL programmatically
 */

function upload_file_url($image_url,$nombre,$autor,$noia = '') 
{ 
	global $wpdb;
	$nombrefichero = sanitize_file_name($nombre);
	$filetype = wp_check_filetype($image_url);
	if ($filetype["ext"]==false)
		{
		$resultado = wp_get_image_mime($image_url);
		$extension = wp_get_default_extension_for_mime_type( $resultado );
		$nombrefichero = $nombrefichero.'.'.$extension;
		}
	else 
		{
		$extension = $filetype["ext"];
		$nombrefichero = $nombrefichero.'.'.$extension;
		}
	// it allows us to use download_url() and wp_handle_sideload() functions
	require_once( ABSPATH . 'wp-admin/includes/file.php' );
	$fich = plugin_dir_path(__FILE__)."../logs/imagenes.log";
	$fichero = fopen($fich,"a");
	// download to temp dir
	/*
	$filetype = wp_check_filetype($image_url);
	if (!in_array($filetype['ext'], ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'tiff'])) {
		// No permitir otro tipo de archivos
		return false;
	}
	*/
	$temp_file = download_url($image_url,10);
	if( is_wp_error( $temp_file ) ) {
		fwrite($fichero, current_datetime()->format('Y-m-d H:i:s').' '.$nombre.' '.$image_url.' '.$temp_file->get_error_message()."\r\n");
		return false;
	}
	// Detectar tipo MIME real desde contenido
	
	if (class_exists('finfo')) {
    		$finfo = new finfo(FILEINFO_MIME_TYPE);
    		$mime_type = $finfo->file($temp_file);
	} elseif (function_exists('mime_content_type')) {
    		$mime_type = mime_content_type($temp_file);
	} else 
	{
    	// Último recurso: tipo por extensión (no fiable, pero funcional)
    	$ext = strtolower(pathinfo($temp_file, PATHINFO_EXTENSION));
    	$fallback_mimes = [
        'jpg' => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'png' => 'image/png',
        'gif' => 'image/gif',
        'webp' => 'image/webp',
        'svg' => 'image/svg+xml',
        'bmp' => 'image/bmp',
        'tiff' => 'image/tiff',
        'ico' => 'image/x-icon',
    	];
    	$mime_type = $fallback_mimes[$ext] ?? 'application/octet-stream';
	}
	fwrite($fichero, "MIME detectado: $mime_type para $image_url\n");
	$allowed_mimes = array_flip(get_allowed_mime_types());
	if (!isset($allowed_mimes[$mime_type])) {
		@unlink($temp_file); // Borra el archivo temporal si no es válido
		fwrite($fichero, current_datetime()->format('Y-m-d H:i:s') . ' ' . $nombre . ' ' . $image_url . ' Tipo MIME no permitido: ' . $mime_type . "\r\n");
		return false;
	}

        $extension = $allowed_mimes[$mime_type];
        //$nombrefichero = $nombrefichero . '.' . $extension;
	if ($noia != 'noia') {
    		try {
        		optimize_image($temp_file,$mime_type);
    		} catch (Exception $e) {
        		fwrite($fichero, current_datetime()->format('Y-m-d H:i:s') . ' ' . $nombre . ' Error al optimizar: ' . $e->getMessage() . "\r\n");
    		}
		}

	/*
	$uploads = wp_upload_dir();
	$upload_path = $uploads['baseurl'];
	$upload_subpath = $uploads['subdir'];
	$foto = $upload_path.$upload_subpath.'/'.$nombrefichero;
	$tabla = $wpdb->prefix.'posts';
	$fotos = $wpdb->get_row("SELECT * FROM $tabla WHERE post_type = 'attachment' AND guid = '$foto'");
	if (!is_null($fotos))
			return $fotos->ID; // Ya existe la foto, devolvemos ID.
	*/
	// move the temp file into the uploads directory
	$file = array(
		//'name'     => basename( $image_url ),
		'name'     => $nombrefichero,
		'type'     => mime_content_type( $temp_file ),
		'tmp_name' => $temp_file,
		'size'     => filesize( $temp_file ),
	);
	$sideload = wp_handle_sideload(
		$file,
		array(
			'test_form'   => false // no needs to check 'action' parameter
		)
	);

	if( ! empty( $sideload[ 'error' ] ) ) {
		fwrite($fichero,current_datetime()->format('Y-m-d H:i:s').' '.$nombre.' '.$image_url.' '.$sideload['error']."\r\n");
		return false;
	}

	// it is time to add our uploaded image into WordPress media library
	$attachment_id = wp_insert_attachment(
		array(
			'guid'           => $sideload['url'],
			'post_mime_type' => $sideload['type'],
//			'post_title'     => basename($sideload['file']),
			'post_title'     => $nombre,
			'post_content'   => '',
			'post_status'    => 'inherit',
			'post_author'    => $autor,
		),
		$sideload['file']
	);
	if ( is_wp_error( $attachment_id ) || ! $attachment_id ) {
    		$mensaje = is_wp_error($attachment_id) ? $attachment_id->get_error_message() : 'Error desconocido o ID de adjunto inválido: ' . print_r($attachment_id, true);
    		fwrite($fichero,current_datetime()->format('Y-m-d H:i:s') . ' ' . $nombre . ' ' . $image_url . ' ' . $mensaje . "\r\n");
    		return 0;
		}

	
	if ($attachment_id)
		update_post_meta( $attachment_id, '_wp_attachment_image_alt', $nombre);

	// update medatata, regenerate image sizes
	require_once( ABSPATH . 'wp-admin/includes/image.php' );
	wp_update_attachment_metadata($attachment_id,wp_generate_attachment_metadata($attachment_id,$sideload['file']));
	fclose($fichero);
	return $attachment_id;
}


function optimize_image($file_path, $mime_type,$max_width = 512, $quality = 70) 
{
    if ($mime_type === 'image/webp') {
        //error_log("🟡 Salta optimización: archivo WebP detectado ($file_path)");
        return;
    }
    // Verificar si la extensión Imagick está disponible
   if (extension_loaded('imagick')) 
    {
        try {
            $image = new Imagick($file_path);
            if ($image->getImageWidth() > $max_width) {
                $image->resizeImage($max_width, 0, Imagick::FILTER_LANCZOS, 1);
            }
            $image->setImageCompressionQuality($quality);
            //$image->setImageFormat('jpg');
            $image->writeImage($file_path);
            $image->clear();
            $image->destroy();
        } catch (Exception $e) {
            error_log("Imagick error: " . $e->getMessage());
            // Si hay error, seguimos sin optimizar
        }
    }  
   else 
    {
        // Si Imagick no está disponible, usamos la extensión GD
        $info = getimagesize($file_path);
        $mime = $info['mime'];
        switch ($mime) {
            case 'image/jpeg':
            case 'image/jpg':
                $image = imagecreatefromjpeg($file_path);
                break;

            case 'image/png':
            case 'image/x-png':
                $image = imagecreatefrompng($file_path);
                break;

            case 'image/gif':
                $image = imagecreatefromgif($file_path);
                break;

            default:
                //throw new Exception('Unsupported image type.');
                error_log("No se puede optimizar imagen con MIME: $mime (GD no lo soporta)");
                return;
        }
        $width = imagesx($image);
        $height = imagesy($image);
        $new_width = $max_width;
        $new_height = floor($height * ($max_width / $width));
        $new_image = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
        // Guardar la imagen optimizada
        if ($mime == 'image/jpeg') {
            imagejpeg($new_image, $file_path, $quality);
        } elseif ($mime == 'image/png') {
            imagepng($new_image, $file_path, floor($quality / 10));
        } elseif ($mime == 'image/gif') {
            imagegif($new_image, $file_path);
        }
        // Limpiar memoria
        imagedestroy($image);
        imagedestroy($new_image);
    }
}



function reemplazarcats($texto,$categoria)
{
/*
%categoriapadre Categoría padre de la categoría principal...
%categoria Categoría del negocio
*/
//$texto = str_replace('%categoriapadre', $categoriapadre, $texto);
$texto = str_replace('%categoria', $categoria, $texto);
return $texto;
}

function usuario_upload_image() {
    // Obtener el primer administrador
    $admin_user = get_users([
        'role'    => 'administrator',
        'number'  => 1,
    ]);

    if (!empty($admin_user)) {
        wp_set_current_user($admin_user[0]->ID);
        wp_set_auth_cookie($admin_user[0]->ID);
    }

    // Ahora procede con la subida
    // Código que usa wp_upload_bits, wp_handle_sideload, etc.
}

