#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <string.h>

#include "newjob.h"
#include "blist.h"


/* Puffergroesse fuer Mailadresse */
#define MAIL_ADDR_LEN       64

/* Puffergroesse fuer Mail-Quelldateiname */
#define MAIL_FILE_NAME_LEN 256


/******************************************************************************
 * main: Kommandozeilenparameter auswerten und entsprechend neuen Auftrag     *
 *       anlegen oder Liste der Auftraege ausgeben ("-q").                    *
 *       Zum Anlegen eines Auftrags muessen die Empfaengeradresse und ein     *
 *       offener Eingabekanal (FILE*) vorliegen.                              *
 ******************************************************************************/

int main(int argc, char *argv[])
{
  char  empfaenger[MAIL_ADDR_LEN];         /* Eingegebene Mail-Adresse */
  char  mail_filename[MAIL_FILE_NAME_LEN]; /* Eingegebener Name der Mail-Quelldatei */
  FILE *mailinhalt;
  int   ret;


  /* spool Verzeichnis anlegen, alle Permission-Bits setzen,
     prozessweite "umask" veraendert diese Bits */
  ret = mkdir("spool", S_IRWXU | S_IRWXG | S_IRWXO);
  if(ret != 0) /* Fehler, ausgenommen "Verzeichnis existiert schon" ? */
  {
    if(errno != EEXIST)
    {
      perror("bmail: mkdir");
      return EXIT_FAILURE;
    }
  }


  /* Kommandozeilenparameter auswerten */
  if(argc >= 2) /* Mindestens ein zusaetzlicher Parameter (neben dem Kommandonamen "bmail" */
  {
    if(strcmp(argv[1], "-q") == 0)
    {
      /* Parameter "-q" => Job-Liste ausgeben */
      blist();
    }
    else if(argc == 2)
    {
      /* Genau ein zusaetzlicher Parameter, dieser ist nicht "-q",
         sondern die Empfaengeradresse => Job anlegen,
         Mail-Text von Standardeingabe einlesen */
      printf("Bitte geben Sie den Inhalt der Mail ein (Beenden mit CTRL-D):\n");


      /* Neuen Auftrag anlegen */
      newjob(argv[1], stdin);
    }
    else /* Zwei (oder mehr) zusaetzliche Parameter: Empfaenger-Adresse und Mail-Quelldateiname */
    {
      /* Mail-Quelldatei oeffnen */
      mailinhalt = fopen(argv[2], "r");
      if(mailinhalt == NULL)
      {
        perror("bmail: open mail source file");
        return EXIT_FAILURE;
      }


      /* Neuen Auftrag anlegen */
      newjob(argv[1], mailinhalt);


      /*  Mail-Quelldatei schliessen */
      fclose(mailinhalt);
    }
  }
  else /* Keine zusaetzlichen Parameter angegeben, zur Eingabe auffordern */
  {
    /* Mail-Adresse einlesen */
    printf("Bitte geben Sie die Mail-Adresse ein:\n");
    scanf("%s", empfaenger);


    /* Mail-Quelldateiname einlesen */
    printf("Bitte geben Sie den Namen der Mail-Datei ein:\n");
    scanf("%s", mail_filename);


    /* Zur Kontrolle */
    printf("Sie haben eingegeben:\n%s\n%s\n", empfaenger, mail_filename);


    /* Mail-Quelldatei oeffnen */
    mailinhalt = fopen(mail_filename, "r");
    if(mailinhalt == NULL) /* Fehler ? */
    {
      perror("bmail: open mail source file");
      return EXIT_FAILURE;
    }


    /* Neuen Auftrag anlegen */
    newjob(empfaenger, mailinhalt);


    /* Mail-Quelldatei schliessen */
    fclose(mailinhalt);
  }


  return EXIT_SUCCESS;
}
