let typ = document.getElementById("type").dataset.value;
let computer = document.getElementById("computer").dataset.value;

async function fetchAndDisplayData() {
  try {
    const response = await fetch(`z_data_${typ}.php?c=${computer}`);
    const jsonData = await response.json();
    const data = jsonData.data || jsonData; // Utilisation plus robuste

    const cpuKey = Object.keys(data).find(key => key.includes('CPU'));
    const ramKey = Object.keys(data).find(key => key.includes('Memory'));

    // Utilisation d'un Set pour collecter les labels uniques plus efficacement
    const uniqueLabels = new Set();
    if (cpuKey && data[cpuKey]) {
      data[cpuKey].forEach(point => uniqueLabels.add(point.datetime));
    }
    if (ramKey && data[ramKey]) {
      data[ramKey].forEach(point => uniqueLabels.add(point.datetime));
    }
    const labels = Array.from(uniqueLabels).sort(); // Conversion en Array et tri

    // Fonction pour créer une map de données
    const createDataMap = (key, rawData) => {
      const map = {};
      if (key && rawData[key]) {
        rawData[key].forEach(point => {
          map[point.datetime] = parseFloat(point.avg_value);
        });
      }
      return map;
    };

    const cpuDataMap = createDataMap(cpuKey, data);
    const ramDataMap = createDataMap(ramKey, data);

    // Fonction pour générer les données du graphique
    const getChartData = (map, sortedLabels) => sortedLabels.map(label => map[label] ?? null);

    const cpuChartData = getChartData(cpuDataMap, labels);
    const ramChartData = getChartData(ramDataMap, labels);

    // Formatage des labels pour l'axe X
    const formattedLabels = labels.map(label => {
      const date = new Date(label);
      return !isNaN(date)
        ? date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })
        : 'Invalid Date';
    });

    // *** Fonction pour créer un graphique (adaptée pour v2.x) ***
    const createChartV2 = (canvasId, label, chartData, formattedLabels) => {
      const ctx = document.getElementById(canvasId)?.getContext('2d');
      if (!ctx) {
        console.error(`Canvas element with id "${canvasId}" not found.`);
        return null;
      }
      return new Chart(ctx, {
        type: 'line',
        data: {
          labels: formattedLabels,
          datasets: [{
            label: label, // Garde le label pour l'infobulle
            data: chartData,
            borderColor: 'rgb(54, 162, 235)',
            backgroundColor: 'rgba(54, 162, 235, 0.1)',
            fill: true,
            tension: 0.3,
            pointRadius: 0
          }]
        },
        options: {
          legend: {
             display: false // Cacher la légende en v2
          },
          responsive: true,
          maintainAspectRatio: false,
          scales: {
            yAxes: [{ // *** Utilisation de yAxes (tableau) pour v2.x ***
              ticks: {
                beginAtZero: true,
                // Ajout de la fonction callback pour formater les labels de l'axe Y
                callback: function(value, index, values) { // Note: le 3ème argument est 'values' en v2
                  return value + '%'; // Ajoute le symbole %
                }
                // max: 100, // Optionnel mais recommandé pour les pourcentages
                // stepSize: 5 // Optionnel: pour suggérer un intervalle
              }
              // scaleLabel: { // Si vous vouliez un titre d'axe en v2 (ce que vous ne voulez pas)
              //   display: false,
              //   labelString: 'Utilisation (%)'
              // }
            }],
            xAxes: [{ // *** xAxes doit aussi être dans un tableau en v2.x ***
              // ... autres options pour l'axe X si nécessaire ...
            }]
          },
          tooltips: { // *** 'tooltips' au pluriel en v2.x ***
             callbacks: {
                 label: function(tooltipItem, data) { // Arguments différents en v2
                     let label = data.datasets[tooltipItem.datasetIndex].label || '';
                     if (label) {
                         label += ': ';
                     }
                     // tooltipItem.yLabel contient la valeur numérique en v2
                     if (tooltipItem.yLabel !== null && typeof tooltipItem.yLabel !== 'undefined') {
                         label += tooltipItem.yLabel + '%';
                     }
                     return label;
                 }
             }
          }
        }
      });
    };

    // Création des graphiques en utilisant la fonction adaptée pour v2.x
    if (cpuKey && data[cpuKey]?.length > 0) {
      createChartV2('cpuChart', 'CPU (%)', cpuChartData, formattedLabels);
    } else {
      const cpuChartElement = document.getElementById('cpuChart');
      if (cpuChartElement) cpuChartElement.style.display = 'none';
      console.log("Pas de données CPU à afficher.");
    }

    if (ramKey && data[ramKey]?.length > 0) {
      createChartV2('ramChart', 'Memory (%)', ramChartData, formattedLabels);
    } else {
      const ramChartElement = document.getElementById('ramChart');
      if (ramChartElement) ramChartElement.style.display = 'none';
      console.log("Pas de données RAM à afficher.");
    }

  } catch (error) {
    console.error('Erreur lors de la récupération ou de l\'affichage des données:', error);
  }
}

window.addEventListener('load', fetchAndDisplayData);
