projet-reseaux-trophiques-equipe-3b / Simulation / ecrire_json.c
ecrire_json.c
Raw
//
// Created by Alban on 26/11/2024.
//

#include "simulation1.h"


void ecrire_json(Graphe *graphe, int compte) {
    FILE *fichier = fopen("DATA/json/simulation.json", "w");
    if (fichier == NULL) {
        printf("Erreur lors de l'ouverture du fichier\n");
        return;
    }

    // Début du fichier JSON
    fprintf(fichier, "{\n");
    fprintf(fichier, "  \"ecosystem\": \"%s\",\n", graphe->ecosysteme);
    fprintf(fichier, "  \"nodes\": [\n");

    // Ecrire les noeuds (les espèces)
    int node_count = 0;
    for (int i = 0; i < graphe->nbSommets; i++) {
        espece e = graphe->tabEspece[i];

        // Ignorer les espèces avec une population égale à 0
        if ((int)e.population[compte] == 0) {
            continue;
        }

        // Déterminer le type d'espèce
        char *type_espece;
        switch (e.type_espece) {
            case 0:
                type_espece = "Producteur primaire";
                break;
            case 1:
                type_espece = "Consommateur primaire";
                break;
            case 2:
                type_espece = "Consommateur secondaire";
                break;
            default:
                type_espece = "Inconnu";
                break;
        }

        // Emojis en fonction du type d'espèce
        char *emoji;
        if (e.type_espece == 0) emoji = "\U0001F331";  // Producteur primaire
        else if (e.type_espece == 1) emoji = "\U0001F41F";  // Consommateur primaire
        else emoji = "\U0001FAB0";  // Consommateur secondaire

        // Écriture des informations de l'espèce
        if (node_count > 0) {
            fprintf(fichier, ",\n");
        }

        fprintf(fichier, "    {\n");
        fprintf(fichier, "      \"id\": %d,\n", e.id);
        fprintf(fichier, "      \"name\": \"%s\",\n", e.name);
        fprintf(fichier, "      \"type\": \"%s\",\n", type_espece);
        fprintf(fichier, "      \"emoji\": \"%s\",\n", emoji);
        fprintf(fichier, "      \"description\": \"Description générique de %s.\",\n", e.name);
        fprintf(fichier, "      \"population\": %d,\n", (int)e.population[compte]);
        fprintf(fichier, "      \"couleur\": \"%s\",\n", e.couleur);
        fprintf(fichier, "      \"tauxC\": %.1f\n", e.tCroissance);
        fprintf(fichier, "    }");

        node_count++;
    }

    fprintf(fichier, "\n  ],\n");

    // Début de la section des liens
    fprintf(fichier, "  \"links\": [\n");

    int link_count = 0;
    for (int i = 0; i < graphe->nbSommets; i++) {
        for (int j = 0; j < graphe->nbSommets; j++) {
            if (graphe->capacites[i][j] > 0 && (int)graphe->tabEspece[i].population[compte] > 0 && (int)graphe->tabEspece[j].population[compte] > 0) {
                if (link_count > 0) {
                    fprintf(fichier, ",\n");
                }

                fprintf(fichier, "    {\"source\": %d, \"target\": %d, \"relation\": %d}", i + 1, j + 1, graphe->capacites[i][j]);

                link_count++;
            }
        }
    }

    // Fin de la section des liens
    fprintf(fichier, "\n  ]\n");

    // Fin du fichier JSON
    fprintf(fichier, "}\n");

    // Fermeture du fichier
    fclose(fichier);
}