import matplotlib.pyplot as plt
import base64
from io import BytesIO


def categorize_metric_data_results(metric_data_results):
    categorized = {"low_peak": [], "medium_peak": [], "high_peak": []}

    for result in metric_data_results:
        values = result.get('Values', [])
        if not values:
            continue  # Si no hay valores, se omite este resultado

        for value in values:
            if value <= 1000:
                categorized["low_peak"].append(value)
            elif 1001 <= value <= 5000:
                categorized["medium_peak"].append(value)
            else:
                categorized["high_peak"].append(value)

    # Verificar si alguna categoría tiene datos, sino indicar que no hay datos
    if not any(categorized.values()):
        return {"message": "No data available for categorization"}

    return categorized

def generate_image_from_metrics(metrics_data):
    # Crear una figura y ejes
    fig, ax = plt.subplots(figsize=(10, 6))

    # Definir las categorías en español
    categories = {
        'low_peak': 'Bajo Consumo',
        'medium_peak': 'Consumo Medio',
        'high_peak': 'Alto Consumo'
    }

    # Recorrer las categorías y graficar los datos
    for category_key, category_name in categories.items():
        values = metrics_data.get(category_key, [])
        if values:
            ax.plot(values, label=category_name)

    # Configuración del gráfico
    ax.set_title("Métricas Elastic Compute Cloud (EC2)")
    ax.set_xlabel("Índice")
    ax.set_ylabel("Valor de la Métrica")
    ax.legend()

    # Convertir la imagen a Base64
    buffer = BytesIO()
    plt.savefig(buffer, format="png")
    plt.close(fig)
    buffer.seek(0)

    # Codificar la imagen en base64
    image_base64 = base64.b64encode(buffer.read()).decode("utf-8")
    return image_base64