// tinymce-upload-handler.js
function handleTinyMCEImageUpload(blobInfo, success, failure, progress) {
    PageMethods.f_str_tokenAPI(onSuccess, onFailure);

    function onSuccess(result) {
        // Get values from global config
        var identifier = tinyMCEConfig.identifier;
        var token = result;
        var urlApi = tinyMCEConfig.urlApi;
        // Validate configuration
        if (!urlApi) {
            console.error('API URL not configured');
            failure('Configuration error: API URL not set');
            return;
        }
        if (!token) {
            console.warn('No authentication token available');
        }
        // Create FormData to send file
        var formData = new FormData();
        formData.append('archivo', blobInfo.blob(), blobInfo.filename());
        if (identifier) {
            formData.append('identificador', identifier);
        }
        $.ajax({
            type: "POST",
            url: urlApi + "/api/util/adjuntos/subir/archivoTemporal",
            data: formData,
            headers: {
                'Authorization': 'Bearer ' + token
            },
            processData: false,
            contentType: false,
            xhr: function () {
                var xhr = new window.XMLHttpRequest();
                xhr.upload.addEventListener("progress", function (evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = (evt.loaded / evt.total) * 100;
                        progress(percentComplete);
                    }
                }, false);
                return xhr;
            },
            success: function (response) {
                if (response && response.respuesta === 200 && response.url) {
                    console.log('Image uploaded successfully:', response.url);
                    var fileUrl = response.url;
                    // Ensure it's an absolute URL
                    if (fileUrl.indexOf('http') !== 0 && fileUrl.indexOf('//') !== 0) {
                        fileUrl = urlApi + '/' + fileUrl.replace(/^\/+/, '');
                    }
                    success(fileUrl);
                } else {
                    console.error('Upload failed:', response);
                    var errorMsg = 'Error al subir el archivo';
                    if (response && response.respuesta !== 200) {
                        errorMsg = 'Error al subir el archivo: ' + response.respuesta;
                        if (response.descripcion) {
                            errorMsg += ' - ' + response.descripcion;
                        }
                    }
                    failure(errorMsg);
                }
            },
            error: function (xhr, status, error) {
                console.error('AJAX error:', status, error);
                console.error('Response status:', xhr.status);
                console.error('Response:', xhr.responseText);
                var errorMsg = 'Error al subir el archivo: ' + error;
                try {
                    var errorResponse = JSON.parse(xhr.responseText);
                    if (errorResponse.descripcion) {
                        errorMsg = errorResponse.descripcion;
                    } else if (errorResponse.mensaje) {
                        errorMsg = errorResponse.mensaje;
                    }
                } catch (e) {
                    if (xhr.status === 401) {
                        errorMsg = 'Error de autenticación. Verifica tus credenciales o inicia sesión nuevamente.';
                    } else if (xhr.status === 403) {
                        errorMsg = 'Acceso restringido. No cuentas con los permisos necesarios.';
                    } else if (xhr.status === 404) {
                        errorMsg = `No se encontró el endpoint de la API.\nVerifica la URL: ${urlApi}/api/util/adjuntos/subir/archivoTemporal`;
                    } else if (xhr.status === 500) {
                        errorMsg = 'Se produjo un error del servidor. Intenta nuevamente.';
                    }
                }
                failure(errorMsg);
            }
        });
    }

    function onFailure(error) {
        console.log("Error Token: " + error.get_message());
    }    
}