#include <iostream>
#include "Personne.h"

using namespace std;

extern int main_exos_13_14bis(void);

int main_exos_13_14bis(void)
{
    cout << "MON NOM EST PERSONNE" << endl;

    // 2 syntaxes équivalentes
    Personne fantome1 = Personne();
    Personne fantome2;
    cout << "fantome1 = " << fantome1 << endl;
    cout << "fantome2 = " << fantome2 << endl;


    Personne personnes1 [3] = { {"Alfred", "Jarry", 60}, {"Charles", "Peguy", 20}, {"Rene", "De Chateaubriand", 56} };

    cout << endl << "AFFICHAGE DU PREMIER TABLEAU DE PERSONNES" << endl;
    for(int i = 0; i < 3; i++)
    {
        cout << personnes1[i] << endl;
    }

    Personne x("Georges", "Clemenceau", 80);
    Personne y("Antoine", "Blondin");
    Personne z("Paul", "Klee", 76);

    // TEST DE L'AGE SANS DATE DE NAISSANCE CREEE
    cout << x.getLastname() << " a " << x.getAge() << " ans" << endl;

    Personne  personnes2 [3] = {x, y, z};
    cout << endl << "AFFICHAGE DU SECOND TABLEAU DE PERSONNES" << endl;
    for(int i = 0; i < 3; i++)
    {
        cout << personnes2[i] << endl;
    }

    cout << endl << "TEST CONSTRUCTEUR DE COPIE" << endl;
    // 3 syntaxes équivalentes
    // Personne u = Personne(x);
    // Personne u = x;
    Personne u(x);
    cout << "original x = " << x << endl;
    cout << "u copie de x = " << u << endl;
    cout << "Mise a jour age de u" << endl;
    u.setAge(40);
    cout << "u modification age = " << x << endl;
    cout << "x original de u pas de modification = " << u << endl;


    cout << endl << "TEST LA VARIABLE DE CLASSE today >>" << endl;
    cout << "Nous sommes le " << Date::today << endl;
    cout << "Nous sommes en l'an " << Date::today.getAnnee()<< endl;

    cout << endl << "TEST DE L'AGE AVEC LA DATE DE NAISSANCE CREEE" << endl;
    cout << x.getLastname() << " a " << x.getAge() << " ans" << endl;
    Personne duval("Jeanne", "Duval", 100, 3, 12, 1912);
    cout << "Madame " << duval.getFirstname() << ' ' << duval.getLastname()
         << " a "<< duval.getAge() << " ans" << endl;

    cout << endl << "TEST SURCHARGE DE L'OPERATEUR >>" << endl;
    Personne w;
    cin >> w;
    cout << "w = " << w << endl;
    cout << "Monsieur " << w.getFirstname() << ' ' << w.getLastname()
         << ", vous avez " << w.getAge() << " ans" << endl;

    cout << endl << "TEST SUR LE MARIAGE >>" << endl;
    cout << y << " et " << z << " se marient" << endl;
    cout << x << " et " << w << " se marient" << endl;
    marier(y, z);
    marier(x, w);
    cout << y << " a pour conjoint " << *(y.getConjoint()) << endl;
    cout << z << " a pour conjoint " << *(z.getConjoint()) << endl;
    cout << x << " a pour conjoint " << *(x.getConjoint()) << endl;
    cout << w << " a pour conjoint " << *(w.getConjoint()) << endl;

    cout << endl << "TEST SURCHARGE DE L'OPERATEUR = : LA REINCARNATION!" << endl;
    Personne v;
    v = x;
    cout << "v assignation de x = " << x << endl;
    if (x.getConjoint() != 0)
        cout << x << " a toujours pour conjoint " << *(x.getConjoint()) << endl;
    if (v.getConjoint() != 0)
        cout << v << " a pour conjoint " << *(v.getConjoint()) << endl;
    else
        cout << v << " n'a pas de conjoint " << endl;

    y = x;
    cout << "y assignation de x = " << x << endl;
    if (x.getConjoint() != 0)
        cout << x << " a toujours pour conjoint " << *(x.getConjoint()) << endl;
    if (y.getConjoint() != 0)
        cout << y << " a pour conjoint " << *(y.getConjoint()) << endl;
    else
        cout << y << " n'a pas de conjoint " << endl;


    cout << "Nombre de personnes instanciees = " <<  Personne::nombre_personnes << endl;

    return 0;
}
