using MSI_src
using Statistics, Plots, Images

# 1. Definir función de contraste (si no la tienes ya en la sesión)
function apply_triq(img_matrix)
    vals = filter(x -> x > 0 && isfinite(x), img_matrix)
    if isempty(vals) return img_matrix end
    q = quantile(vals, 0.98)
    if q == 0 q = maximum(vals) end
    return clamp.(img_matrix ./ q, 0.0, 1.0)
end

# 2. Configuración de rutas
path_data = "Hoja.imzML"
path_mask = "region_interes.png"
output_folder = "resultados_expertos/batch_triq"
mkpath(output_folder)

# 3. Carga de datos
data = OpenMSIData(path_data)

# 4. Obtener espectro promedio SOLO de la zona de la máscara (ROI)
println("Calculando espectro promedio en la ROI...")
# Nota: Usamos la función de MSI_src para obtener el promedio filtrado
mzs, avg_ints = MSI_src.get_average_spectrum(data, mask_path=path_mask)

# 5. Identificar picos importantes (ej. > 2% del pico base)
max_int = maximum(avg_ints)
umbral = max_int * 0.02  # Ajusta este valor (0.01 para 1%, 0.05 para 5%)
indices_picos = findall(x -> x > umbral, avg_ints)

println("Se encontraron $(length(indices_picos)) iones que superan el umbral.")

# 6. Bucle para generar imágenes con TrIQ
for idx in indices_picos
    mz_val = mzs[idx]
    
    # Validar rango (ejemplo: m/z 50 a 700)
    if mz_val < 50.0 || mz_val > 700.0
        continue
    end

    println("Procesando m/z: $(round(mz_val, digits=2))")
    
    # A. Extraer los datos crudos con la máscara aplicada
    raw_slice = MSI_src.get_mz_slice(data, mz_val, 0.05, mask_path=path_mask)
    
    # B. Aplicar contraste TrIQ
    enhanced_slice = apply_triq(raw_slice)
    
    # C. Crear el mapa de calor (Heatmap)
    p = heatmap(enhanced_slice, 
                title="Ion m/z: $(round(mz_val, digits=2))", 
                color=:viridis, 
                aspect_ratio=:equal, 
                yflip=true,
                xaxis=false, yaxis=false)
    
    # D. Guardar
    nombre_archivo = "ion_$(round(mz_val, digits=2))_triq.png"
    savefig(p, joinpath(output_folder, nombre_archivo))
end

println("--- Proceso completado. Revisa la carpeta: $output_folder ---")
