#include <iostream>
#include "Serveur.h"
#include "Methodes.h"

/**
protocole de transfert:
direction du perso: ↑→↓← (  alt24 à alt27 )
si perso ne bouge pas: ■ ( alt254 )

a faire: commande reset
*/
int main()
{
    ///creation du serveur
    Serveur serveur(7856, 2);
    if(!serveur.rendreUtilisable())
    {
        std::cout << "Erreur d'initialisation du serveur!" << std::endl;
        return -1;
    }

    ///symboles envoyer = '○', fini = '$', arreter = '┼', bougePas = '■', reset = '/'
    char envoyer = 9, fini = 36, arreter = 197, bougePas = 254, reset = 47;

    ///attribution du numero du joueur
    char id = '0';
    serveur.envoyer(&id, 0, 1);
    id = '1';
    serveur.envoyer(&id, 1, 1);

    /// attributs
    bool continuer = true;
    unsigned int taille = 1;
    char joueur1 = bougePas, joueur2 = bougePas;
    std::string cheminNiveau;
    char niveau[18*24];
    bool changerNiveau = true, isreset = false;

    ///boucle evenementielle
    while(continuer)
    {
        if(changerNiveau || isreset)
        {
            if(!isreset)
                cheminNiveau = niveauSuivant("Niveaux/0index.txt", cheminNiveau);
            else
                isreset = false;
            if(!chargerNiveau(niveau, "Niveaux/"+cheminNiveau))
            {
                std::cout << "Erreur de chargement du niveau : " << cheminNiveau << std::endl;
                serveur.envoyer(&arreter, 0, taille);
                serveur.envoyer(&arreter, 1, taille);
                return -1;
            }
            else
            {
                serveur.envoyer(&envoyer, 0, taille);
                serveur.envoyer(&envoyer, 1, taille);
                for(int i = 0;i<18*24;i++)
                {
                    serveur.envoyer(&niveau[i], 0, taille);
                    serveur.envoyer(&niveau[i], 1, taille);
                }
                changerNiveau = false;
            }
        }
        else
        {
            serveur.envoyer(&joueur2, 0, taille);
            serveur.envoyer(&joueur1, 1, taille);
        }
        serveur.recevoir(&joueur1, 0, taille);
        serveur.recevoir(&joueur2, 1, taille);

        if(joueur1 == arreter)
        {
            serveur.envoyer(&arreter, 1, taille);
            save("Niveaux/0index.txt", cheminNiveau);
            return 0;
        }
        else if(joueur2 == arreter)
        {
            serveur.envoyer(&arreter, 0, taille);
            save("Niveaux/0index.txt", cheminNiveau);
            return 0;
        }
        else if(joueur1 == fini && joueur2 == fini)
            changerNiveau = true;
        else if(joueur1 == reset || joueur2 == reset)
            isreset  = true;
    }
    return 0;
}