#include <iostream>
#include <cstdlib>
#include "Garnier-Gautier-Le-Gros-Viguier-automate.h"

using namespace std;

int main()
{
    bool saisie = true;

    int num; ///Variable qui stocke le numero de l'automate
    bool determ; ///Variable qui permet de savoir si l'automate est ou n'est pas deterministe
    bool complet; ///Variable qui permet de savoir si l'automate est ou n'est pas complet
    string reponse;

    while (saisie == true)
    {
        bool passage = false;
        cout << "Saisir le numero de l'automate : ";
        cin >> num;
        cout << endl;

        Automate automate_deter;

        Automate aAutomate(num);

        if (aAutomate.nb_automate > 0) /// Si l'automate existe en memoire
        {
            cout << aAutomate; /// On l'affiche

            cout << endl;

            determ = isDeterministe(aAutomate); /// On verifie si il est deterministe

            if(determ == false) /// Si non
            {
                Determiniser(aAutomate, automate_deter); /// On le determinise

                cout << automate_deter; /// On l'affiche

                system("pause");
                cout << endl;

                determ = isDeterministe(automate_deter); ///On reverifie si l'automate est deterministe

                passage = true;
            }

            if (determ == true) /// Si il est deterministe
            {
                complet = isComplet(aAutomate); /// On regarde si il est complet
            }

            if (complet == false) /// Si il n'est pas complet
            {
                if (passage == true)
                {
                    Completer(automate_deter); /// On le complete
                    determ = isDeterministe(automate_deter); /// On verifie qu'il est toujours deterministe
                    complet = isComplet(automate_deter); /// On verifie qu'il est bien complet

                    cout << endl << automate_deter; /// On affiche l'automate complet et deterministe
                }

                else
                {
                    Completer(aAutomate); /// On le complete
                    determ = isDeterministe(aAutomate); /// On verifie qu'il est toujours deterministe
                    complet = isComplet(aAutomate); /// On verifie qu'il est bien complet
                    cout << endl << aAutomate; /// On affiche l'automate complet et deterministe
                }

            }

            cout << endl;

            system("pause");

            if (passage == true)
            {
                RecoMot(automate_deter); /// On peut verifier des mots
            }

            else
            {
                RecoMot(aAutomate); /// On peut verifier des mots
            }


            cout << "Voulez-vous etudier un autre automate ? (o/n) : "; /// On propose l'etude d'un autre automate
            cin >> reponse;

            if (reponse == "o") /// Si oui
            {
                saisie = true; /// On continue
                system("cls");
            }

            else /// Si non
            {
                saisie = false; /// On quitte
            }
        }

    }

    system("cls");

    cout << "Bonne journee !";

    return 0;

}
