/* plop.c */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include "hasard.h"

/* retourne un nombre aléatoire de mots */
int NombreMots ();

/* affiche une transition aléatoire */
void transition ();

/* affiche un smiley suivi d'un retour à la ligne */
void smiley ();

/* affiche une ponctuation aléatoire suivie d'un retour à la ligne */
void ponctuation (); 

/* affichent un mot aléatoire du vocabulaire précisé */
void mot_shadok ();
void mot_geek ();
void mot_vache ();

/* affichent un écran complet de dialogue dans le vocabulaire précisé */
void dialogue_shadok (int nbphrases);
void dialogue_geek (int nbphrases);
void dialogue_vache (int nbphrases);
void dialogue_tous (int nbphrases);

int main (int argc, char *argv[])
{
  if (argc == 1 ||         /* pas de paramètre */
      (argv[1][0] != 's' && /* mauvais paramètre */
       argv[1][0] != 'm' && 
       argv[1][0] != 'p' &&
       argv[1][0] != 'a')) 
    {
      printf ("arguments :\n'p'\tpour vocabulaire geek\n's'\tpour vocabulaire shadok\n'm'\tpour vocabulaire vache\n");
    }
  else
    {
      srand(time(NULL));
      switch (argv[1][0])
	{
	case 's' : dialogue_shadok(52) ; break ;
	case 'p' : dialogue_geek(52) ; break ;
	case 'm' : dialogue_vache(52) ; break ;
	case 'a' : dialogue_tous(52) ;
	}
    }
  return 0;
}

int NombreMots (void)
{
  int H = hasard (100);
  if      (H<30) return 4;
  else if (H<60) return 5;
  else if (H<85) return 6;
  else if (H<90) return 1;
  else if (H<95) return 3;
  else if (H<98) return 10;
  else           return 2;
}

void transition (void)
{
  int H = hasard (100);
  if (H<50) printf(" ");
  else if (H<75) printf("-");
  else if (H<80) printf(", ");
  /* sinon rien, les mots sont collés */
}

void smiley (void)
{
  int H = hasard (100);
  if      (H<50) printf (" !");
  else if (H<70) printf (" :p");
  else if (H<85) printf (" ;)");
  else if (H<95) printf (" :)");
  else           printf ("!!!");
  printf("\n");
}

void ponctuation (void)
{
  int H = hasard (100);
  if      (H<50) printf(".");
  else if (H<70) printf (" ?");
  else if (H<85) printf (" !");
  else if (H<95) printf ("...");
  else           printf (" !!!");
  printf("\n");
}


void mot_shadok ()
{
  int H;
  H = hasard (4);
  switch (H)
    {
    case 0 : printf ("ga"); break;
    case 1 : printf ("bu"); break;
    case 2 : printf ("zo"); break;
    case 3 : printf ("meuh"); break;
    }
}

void mot_geek ()
{
  int H;
  int nbo;

    H = hasard(100);
    if      (H<90) nbo=1;
    else if (H<93) nbo=3;
    else if (H<95) nbo=0;
    else if (H<97) nbo=2;
    else if (H<99) nbo=10;
    else           nbo=4;
    printf("pl");
    for (int i = 1 ; i <= nbo ; i++)
      {
	printf ("o");
      }
    printf ("p");
}

void mot_vache ()
{
  int H;
  int nbm, nbe, nbu, nbh;

    H = hasard (100);
    if      (H<90) nbm=1;
    else if (H<94) nbm=3;
    else if (H<96) nbm=2;
    else if (H<98) nbm=5;
    else           nbm=7;

    H = hasard (100);
    if      (H<80) nbe=1;
    else if (H<85) nbe=3;
    else if (H<90) nbe=2;
    else if (H<95) nbe=5;
    else           nbe=7;

    H = hasard (100);
    if      (H<80) nbu=1;
    else if (H<90) nbu=3;
    else if (H<95) nbu=5;
    else           nbu=7;

    H = hasard (100);
    if      (H<90) nbh=1;
    else if (H<94) nbh=2;
    else if (H<98) nbh=5;
    else           nbh=3;

    for (int i = 1 ; i <= nbm ; i++)
	printf ("m");
    for (int i = 1 ; i <= nbe ; i++)
	printf ("e");
    for (int i = 1 ; i <= nbu ; i++)
	printf ("u");
    for (int i = 1 ; i <= nbh ; i++)
	printf ("h");
}

void dialogue_shadok (int nbphrases)
{
  int nbmots;
  for (int i = 1 ; i <= nbphrases ; i++)
    {
      nbmots = NombreMots();
      sleep (nbmots/2);
      printf ("- ");
      mot_shadok();
      for (int j = 2 ; j < nbmots ; j++)
	{
	  transition();
	  mot_shadok ();
	}
      ponctuation();
      sleep (nbmots/5);
    }
}

void dialogue_geek (int nbphrases)
{
  int nbmots;
  for (int i = 1 ; i <= nbphrases ; i++)
    {
      nbmots = NombreMots();
      sleep (nbmots/2);
      printf ("- ");
      mot_geek();
      for (int j = 2 ; j < nbmots ; j++)
	{
	  transition();
	  mot_geek ();
	}
      smiley();
      sleep (nbmots/5);
    }
}

void dialogue_vache (int nbphrases)
{
  int nbmots;
  for (int i = 1 ; i <= nbphrases ; i++)
    {
      nbmots = NombreMots();
      sleep (nbmots/2);
      printf ("- ");
      mot_vache ();
      for (int j = 2 ; j < nbmots ; j++) /* nbmots en tout*/
	{
	  transition();
	  mot_vache ();
	}
      ponctuation();
      sleep (nbmots/5);
    }
}

void dialogue_tous (int nbphrases)
{
  for (int i = 1 ; i <= nbphrases ; i++)
  {
    int type = hasard(3);
    if (type == 0)
    {
      printf("Shadok%d\t",hasard(5));
      dialogue_shadok(1);
    }
    if (type == 1)
    {
      printf("Geek%d\t",hasard(5));
      dialogue_geek(1);
    }
    if (type == 2)
    {
      printf("Vache%d\t",hasard(5));
      dialogue_vache(1);
    }
  }
}
