"""
    Module pour l'interfaçage avec le binaire pour l'exercice sur K-PPV
"""


import json
import sys
import subprocess
import os
from pathlib import Path


def analyse_complet(filename):
    """
        Demande au binaire d'analyser le fichier
        Et lit la réponse au format JSON
    """
    result = subprocess.run(
        ["./analyse_forme", "analyse", filename],
        stderr=sys.stderr,
        stdout=subprocess.PIPE,
        check=True
    )

    return json.loads(result.stdout)


def analyse(filename):
    """
        Réalise l'analyse partiel du fichier,
        suffisant pour les questions normales.
    """
    res = analyse_complet(filename)
    res.pop("nb_coins")
    return res


def donnees():
    """
        Crée la cohorte de données en provenance du dossier 'donnees'
    """
    res = []
    for file in os.scandir("donnees"):
        res.append(analyse(file))
    return res


def donnees_complet():
    """
        Crée la cohorte de données complète en provenance du dossier 'donnees'
    """
    res = []
    for file in os.scandir("donnees"):
        res.append(analyse_complet(file))
    return res


def mysteres():
    """
        Crée une cohort de forme mystères, en provenance du dossier 'mysteres'
    """
    res = []
    for file in os.scandir("mysteres"):
        res.append(analyse(file))
    return res


def populate():
    """
        Crée les fichiers nécessaires, s'ils n'existent pas
    """
    if not Path("donnees").exists():
        os.mkdir("donnees")
        subprocess.run(
            ["./analyse_forme", "generate", "100"],
            stderr=sys.stderr,
            stdout=sys.stdout,
            check=True,
        )
    if not Path("mysteres").exists():
        os.mkdir("mysteres")
        subprocess.run(
            ["./analyse_forme", "mystere", "10"],
            stderr=sys.stderr,
            stdout=sys.stdout,
            check=True,
        )


populate()
