<?php
//header('Content-Type: text/html; charset=utf-8');

msg("Ejecuta el PHP");
msg("--------------");

$oLoadDatosForm = new Teditable();

$oLoadDatosForm->recibeRegistro();
//$oLoadDatosForm->showRegistro( $oLoadDatosForm->registroRecibido );

//header("Location: new_page.php");

return true;


//----------------------------------------------------------------------------
class Teditable {

    // DATAS --------------------------------
    private $registroRecibido;  // Viene de JS
    private $aRegLoaded;        // Nombre campo-valor para devolver a JS
    //---------------------------------------



    // METODOS ------------------------------
    function __construct() {}


//-----------------------------------------------------------------------------------
function recibeRegistro() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {

        // Verificar si el archivo fue enviado y si existe un id de la imagen
        if (isset($_FILES['file']) && isset($_POST['imgId'])) {
           $this->saveImg();
        }
        else {
            $this->registroRecibido = json_decode(file_get_contents('php://input'), true);
        }
    }
       
  
    if ($this->registroRecibido === null) {
        msg("Error al decodificar datos JSON");
        return;
    }
  
    msg("***********************");
    msg($this->registroRecibido["accion"]);
    
    switch ($this->registroRecibido["accion"]) {
  
        case "saveCodigoFuente":
            msg("Graba en disco el CodigoFuente");
            $this->saveCodigoFuente($this->registroRecibido["codigoFuente"],$this->registroRecibido["fileHTML"]);
            break;

      case "savetxt":
          msg("Graba en disco el el TEXTO");
          $this->savetxt($this->registroRecibido["TEXToriginal"],$this->registroRecibido["TEXTnew"],$this->registroRecibido["fileHTML"]);
          break;
          
      case "load":
            msg("Carga array desde disco");
            if (count($this->aRegLoaded)>0)
               echo $this->json_encode_UTF8($this->aRegLoaded);  // Devolución a JS
            else
               echo json_encode(array(""));
        
            break;
      case "loadpaginas":
                msg("Carga nombre páginas html en disco");
                $this->loadpaginas();
                if (count($this->aRegLoaded)>0)
                   echo json_encode($this->aRegLoaded);  // Devolución a JS
                else
                   echo json_encode(array(""));
                break;         
    }
  
    //$this->showRegistro( $this->registroRecibido );
    
  }
  
  
  //-----------------------------------------------------------------------------------

// function savetxt($TEXToriginal,$TEXTnew,$fileHTML) {

//     $TEXToriginal = urldecode($TEXToriginal);
//     $TEXTnew      = urldecode($TEXTnew);
//     $fileHTML     = "../".$fileHTML;

//     msg($TEXToriginal." -> ".$TEXTnew." ---- ".$fileHTML);

//     // Cargar el contenido del archivo
//     $html = file_get_contents($fileHTML);

//     // El texto que queremos buscar
//     $texto_a_buscar = "texto que buscas";

//     // Buscar el texto
//     if (strpos($html, $TEXToriginal) !== false) {
//        echo "El texto fue encontrado en el archivo.";
//     } else {
//        echo "El texto no fue encontrado en el archivo.";
//     }
// }

// Carga array con los nombres de las páginas html en disco
function loadpaginas() {
    // Creamos array para los nombres
    $this->aRegLoaded = [];

    // Obtener el directorio anterior al actual
    $currentDir = dirname(__DIR__);

    // Listar todos los archivos en el directorio
    $files = scandir($currentDir);

    // Filtrar solo los archivos con extensión .html
    foreach ($files as $file) {
        if (pathinfo($file, PATHINFO_EXTENSION) === 'html') {
            $this->aRegLoaded[] = $file; // Agregar al array
        }
    }

    // Opcional: Ordenar alfabéticamente el array
    sort($this->aRegLoaded);
}


// Se recibe en UTF-8 y se lee el html en UTF-8
function saveCodigoFuente($codigoFuente,$fileHTML) {
    // Ruta del archivo HTML
    $fileHTML = "../" . urldecode($fileHTML);

    // Decodificar el texto recibido desde JavaScript (por si viene codificado)
    $codigoFuente = urldecode($codigoFuente);

    //msg($fileHTML);
    //msg($codigoFuente);

    // Guardar el archivo modificado
    file_put_contents($fileHTML, $codigoFuente);
}

// Se recibe en UTF-8 y se lee el html en UTF-8
function savetxt($TEXToriginal, $TEXTnew, $fileHTML) {
    
    // Ruta del archivo HTML
    $fileHTML = "../" . $fileHTML;

    // Decodificar el texto recibido desde JavaScript (por si viene codificado)
    $TEXToriginal = urldecode($TEXToriginal);
    $TEXTnew      = urldecode($TEXTnew);

    // Normalizar textos para evitar problemas de espacios y codificación
    //$TEXToriginal = $this->normalizarTexto($TEXToriginal);

    msg("Esto busca en el html: ".$TEXToriginal);

    // Cargar el contenido del archivo HTML
    $html = file_get_contents($fileHTML);
    if ($html === false) {
       msg("No se pudo leer el archivo HTML.");
       echo "No se pudo leer el archivo HTML.";
       return;
    }

    // Normalizar el HTML cargado
    //$html = $this->normalizarTexto($html);

    msg("Contenido del HTML decodificado: " . $html);

    // Buscar el texto original decodificado en el contenido HTML decodificado
    if (strpos($html, $TEXToriginal) !== false) {
        msg("Texto encontrado en el HTML.");

        // Hacer el reemplazo en el HTML original
        $html  = str_replace($TEXToriginal, $TEXTnew, $html);
        // Guardar el archivo modificado
        file_put_contents($fileHTML, $html);

        echo "El texto fue reemplazado con éxito.";
    } else {
        msg("Texto NOOOO encontrado en el HTML.");
        //msg($TEXToriginal);
        echo "El texto no fue encontrado en el archivo.";
    }
}

// function normalizarTexto($texto) {
//     $texto = html_entity_decode($texto); // Decodificar entidades HTML
//     $texto = preg_replace('/\s+/', ' ', $texto); // Normalizar espacios
//     return trim($texto);
// }


function saveImg() {
    // Verificar si el archivo y el id de la imagen fueron enviados
    if (isset($_FILES['file']) && isset($_POST['imgId'])) {
        $imgId = $_POST['imgId'];  // Recibimos el id de la imagen desde JS

        // Obtener la información del archivo
        $file = $_FILES['file'];
        $fileName = $file['name'];
        $fileTmpName = $file['tmp_name'];
        $fileError = $file['error'];

        // Ruta donde se guardarán las imágenes (asegúrate de que la carpeta existe y tiene permisos correctos)
        $uploadDir = '../assets/img/';  // Cambia esto por la ruta real donde tienes las imágenes
        
        // Verificar que la carpeta de subida existe
        if (!is_dir($uploadDir)) {
            echo json_encode([
                'success' => false,
                'message' => 'La carpeta de destino no existe.'
            ]);
            exit;
        }

        // Crear un nuevo nombre para el archivo usando el id de la imagen
        $newFileName = $imgId; // . '.' . pathinfo($fileName, PATHINFO_EXTENSION);  // Usar el id de la imagen como nombre

        // Verificar si no hay error en la subida
        if ($fileError === UPLOAD_ERR_OK) {
            $uploadPath = $uploadDir . $newFileName;

            // Mover el archivo a la carpeta del servidor
            if (move_uploaded_file($fileTmpName, $uploadPath)) {
                // Devolver la URL de la nueva imagen al cliente
                echo json_encode([
                    'success' => true,
                    'newImageUrl' => $uploadPath
                ]);
            } else {
                echo json_encode([
                    'success' => false,
                    'message' => 'No se pudo mover el archivo.'
                ]);
            }
        } else {
            echo json_encode([
                'success' => false,
                'message' => 'Error en la subida del archivo.'
            ]);
        }
    } else {
        // Este else se ejecuta si no se envió el archivo o el id de la imagen
        echo json_encode([
            'success' => false,
            'message' => 'No se envió el archivo o el id de la imagen.'
        ]);
    }
}




// function savetxt($TEXToriginal, $TEXTnew, $fileHTML) {
    
//     // Ruta del archivo HTML
//     $fileHTML = "../" . $fileHTML;

//     // Decodificar el texto recibido desde JavaScript (por si viene codificado)
//     $TEXToriginal = urldecode($TEXToriginal);
//     $TEXTnew      = urldecode($TEXTnew);
//     // Convertir el texto a Windows-1252
//     $TEXToriginal = delSpaceHtml(UTF8ToWin($TEXToriginal));
//     $TEXTnew      = delSpaceHtml(UTF8ToWin($TEXTnew));

//     msg("Esto busca en el html: ".$TEXToriginal);

//     // Cargar el contenido del archivo HTML
//     $html = file_get_contents($fileHTML);
//     $html = delSpaceHtml(UTF8ToWin($html));
   
//     // Decodificar las entidades HTML en el contenido del archivo aspersam, espacios html, etc
//     $decodedHtml = html_entity_decode($html, ENT_QUOTES | ENT_HTML5);
//     msg("Contenido del HTML decodificado: " . $decodedHtml);

//     // Buscar el texto original decodificado en el contenido HTML decodificado
//     if (strpos($decodedHtml, $TEXToriginal) !== false) {
//         msg("Texto encontrado en el HTML.");

//         // Hacer el reemplazo en el HTML original
//         $html  = str_replace($TEXToriginal, $TEXTnew, $decodedHtml);
        
//         // Codificar de nuevo en UTF-8
//         $html  = WinToUTF8($html);

//         // Guardar el archivo modificado
//         file_put_contents($fileHTML, $html);

//         echo "El texto fue reemplazado con éxito.";
//     } else {
//         echo "El texto no fue encontrado en el archivo.";
//     }
// }

}
//--------------------------- Fin Clase Teditable ----------------------------------



function delSpaceHtml($x)     { return str_replace("&nbsp;", " ", $x); }
//function restoreSpaceHtml($x) { return str_replace("[####]", "&nbsp;",$x); }

function UTF8ToWin($x) { return mb_convert_encoding($x, 'Windows-1252', 'UTF-8'); }
function WinToUTF8($x) { return mb_convert_encoding($x, 'UTF-8', 'Windows-1252'); }


// Guarda msg en fichero para debug
function logFilePHPmsgTEMP($texto)
{
    // Para anularlo
    return true;
    //----------------

    $file = "logFilePHPconfiWeb.log";
    
    $fechaHora = date('d-m-Y H:i:s'); // Obtener la fecha y hora actual en formato 'DD-MM-YYYY HH:mm:ss'
    $contenido = $fechaHora . ' - ' . $texto . PHP_EOL; // Concatenar fecha, hora y texto con un salto de línea

    $ddf = fopen($file, 'a'); // Abrir en modo append
    fwrite($ddf, $contenido); // Agregar el contenido al final del archivo
    fclose($ddf);
}

function msg($texto) { logFilePHPmsgTEMP($texto);}
?>