import java.util.Scanner;

class PGDemain {

/**
  @test
*/

public static void test_dernierJour()
{
  Scanner input = new Scanner(System.in);
  int annee, mois;
  System.out.print("Mois, annee? ");
  mois = input.nextInt();
  annee = input.nextInt();
  System.out.println("==> Dernier jour est le " + UtilsDT.dernierJour(mois,annee));
}

/**
  Calcule le lendemain d'une DateJMA
  @param[in,out] dt - une DateJMA
*/

public static void calculerDemainDT(UtilsDT.DateJMA dt)
{
  if (dt.jr < UtilsDT.dernierJour(dt.mm,dt.an))
  {
    ++dt.jr;
  }
  else
  {
    dt.jr = 1;
    if (dt.mm < 12)
    {
      ++dt.mm;
    }
    else
    {
      dt.mm = 1;
      ++dt.an;
    }
  }
}

/**
  @test
*/

public static void test_demain()
{
  UtilsDT.DateJMA dt = new UtilsDT.DateJMA();
  UtilsDT.saisirGregDT(dt);
  calculerDemainDT(dt);
  System.out.print("==> Lendemain est le ");
  UtilsDT.afficherDT(dt);
}

/**
  Nombre de jours écoules entre deux DateJMA
  @param[in] d1 - une DateJMA
  @param[in] d2 - une DateJMA
  @return le nombre de jours entre d1 et d2 avec d1 antérieure à d2
*/

public static int njoursEntreDT(final UtilsDT.DateJMA d1, final UtilsDT.DateJMA d2)
{
  int nj = 0;
  UtilsDT.DateJMA dt = new UtilsDT.DateJMA();
  dt.jr = d1.jr;
  dt.mn = d1.mm;
  dt.an = d1.an;
  while (!(dt.jr == d2.jr && dt.mm == d2.mm && dt.an == d2.an))
  {
    ++nj;
    calculerDemainDT(dt);
  }
  return (nj + 1);
}

/**
  Prédicat de DateJMA postérieure
  @param[in] d1 - première DateJMA
  @param[in] d2 - deuxième DateJMA
  @return Vrai si d1 est postérieure a d2
*/

public static boolean posterieureDT(final UtilsDT.DateJMA d1, final UtilsDT.DateJMA d2)
{
  return (d1.an > d2.an) || (d1.an == d2.an && (d1.mm > d2.mm || (d1.mm == d2.mm && d1.jr > d2.jr)));
}

/**
  @test
*/

public static void test_ecoules()
{
  UtilsDT.DateJMA d1 = new UtilsDT.DateJMA();
  System.out.print("Premiere date: ");
  UtilsDT.saisirGregDT(d1);
  UtilsDT.DateJMA d2 = new UtilsDT.DateJMA();
  System.out.print("Deuxieme date: ");
  UtilsDT.saisirGregDT(d2);
  if (posterieureDT(d1,d2))
  {
    System.out.println("==> OUPS Premiere date posterieure a la deuxieme");
  }
  else
  {
    System.out.println("==> Nombre de jours ecoules = " + njoursEntreDT(d1,d2));
  }
}

public static void main(String[] args)
{
  test_dernierJour();
  test_demain();
  test_ecoules();
}

}
