/*
    Popt Library Test Program Number Too 
    
    --> "a real world test of popt bugs" <--

    Copyright (C) 1999 US Interactive, Inc.

    This program can be used under the GPL or LGPL at your
    whim as long as this Copyright remains attached.  
*/

#include "system.h"

static char *PathnameOfKeyFile		= NULL;
static char *PathnameOfOfferFile	= NULL;

static char *txHost			= NULL;
static int   txSslPort			= 443;
static int   txStoreId			= 0;

static char *contentHost		= NULL;
static char *contentPath		= NULL;

static char *dbPassword			= NULL;
static char *dbUserName			= NULL;

static const char *rcfile		= "createuser-defaults";
static char *username			= NULL;

static char *password			= NULL;
static char *firstname			= NULL;
static char *lastname			= NULL;
static char *addr1			= NULL;
static char *addr2			= NULL;
static char *city			= NULL;
static char *state			= NULL;
static char *postal			= NULL;
static char *country			= NULL;

static char *email			= NULL;

static char *dayphone			= NULL;
static char *fax			= NULL;


int 
main(int argc, const char ** argv) {

    poptContext optCon;   /* context for parsing command-line options */
    struct poptOption userOptionsTable[] = {
        { "first", 'f', POPT_ARG_STRING, &firstname, 0,
            "user's first name", "first" },
        { "last", 'l', POPT_ARG_STRING, &lastname, 0,
            "user's last name", "last" },
        { "username", 'u', POPT_ARG_STRING, &username, 0,
            "system user name", "user" },
        { "password", 'p', POPT_ARG_STRING, &password, 0,
            "system password name", "password" },
        { "addr1", '1', POPT_ARG_STRING, &addr1, 0,
            "line 1 of address", "addr1" },
        { "addr2", '2', POPT_ARG_STRING, &addr2, 0,
            "line 2 of address", "addr2" },
        { "city", 'c', POPT_ARG_STRING, &city, 0,
            "city", "city" },
        { "state", 's', POPT_ARG_STRING, &state, 0,
            "state or province", "state" },
        { "postal", 'P', POPT_ARG_STRING, &postal, 0,
            "postal or zip code", "postal" },
        { "zip", 'z', POPT_ARG_STRING, &postal, 0,
            "postal or zip code", "postal" },
        { "country", 'C', POPT_ARG_STRING, &country, 0,
            "two letter ISO country code", "country" },
        { "email", 'e', POPT_ARG_STRING, &email, 0,
            "user's email address", "email" },
        { "dayphone", 'd', POPT_ARG_STRING, &dayphone, 0,
            "day time phone number", "dayphone" },
        { "fax", 'F', POPT_ARG_STRING, &fax, 0,
            "fax number", "fax" },
        { NULL, 0, 0, NULL, 0, NULL, NULL }
    };
    struct poptOption transactOptionsTable[] = {
        { "keyfile", '\0', POPT_ARG_STRING, &PathnameOfKeyFile, 0,
            "transact offer key file (flat_O.kf)", "key-file" },
        { "offerfile", '\0', POPT_ARG_STRING, &PathnameOfOfferFile, 0,
            "offer template file (osl.ofr)", "offer-file" },
        { "storeid", '\0', POPT_ARG_INT, &txStoreId, 0,
            "store id", "store-id" },
        { "rcfile", '\0', POPT_ARG_STRING, &rcfile, 0,
            "default command line options (in popt format)", "rcfile" },
        { "txhost", '\0', POPT_ARG_STRING, &txHost, 0,
            "transact host", "transact-host" },
        { "txsslport", '\0', POPT_ARG_INT, &txSslPort, 0,
            "transact server ssl port ", "transact ssl port" },
        { "cnhost", '\0', POPT_ARG_STRING, &contentHost, 0,
            "content host", "content-host" },
        { "cnpath", '\0', POPT_ARG_STRING, &contentPath, 0,
            "content url path", "content-path" },
        { NULL, 0, 0, NULL, 0, NULL, NULL }
    };

    struct poptOption databaseOptionsTable[] = {
        { "dbpassword", '\0', POPT_ARG_STRING, &dbPassword, 0,
            "Database password", "DB password" },
        { "dbusername", '\0', POPT_ARG_STRING, &dbUserName, 0,
            "Database user name", "DB UserName" },
        { NULL, 0, 0, NULL, 0, NULL, NULL }
    };

    struct poptOption optionsTable[] = {
	{ NULL, '\0', POPT_ARG_INCLUDE_TABLE,  NULL, 0,
            "Transact Options (not all will apply)", NULL },
	{ NULL, '\0', POPT_ARG_INCLUDE_TABLE,  NULL, 0,
            "Transact Database Names", NULL },
	{ NULL, '\0', POPT_ARG_INCLUDE_TABLE,  NULL, 0,
            "User Fields", NULL },
        POPT_AUTOHELP
        { NULL, 0, 0, NULL, 0, NULL, NULL }
    };

    optionsTable[0].arg = transactOptionsTable;
    optionsTable[1].arg = databaseOptionsTable;
    optionsTable[2].arg = userOptionsTable;

#if defined(HAVE_MCHECK_H) && defined(HAVE_MTRACE)
    mtrace();   /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */
#endif

    optCon = poptGetContext("createuser", argc, argv, optionsTable, 0);
    poptReadConfigFile(optCon, rcfile );

    /* although there are no options to be parsed, check for --help */
    poptGetNextOpt(optCon);

    optCon = poptFreeContext(optCon);

    printf( "dbusername %s\tdbpassword %s\n"
            "txhost %s\ttxsslport %d\ttxstoreid %d\tpathofkeyfile %s\n"
	    "username %s\tpassword %s\tfirstname %s\tlastname %s\n"
	    "addr1 %s\taddr2 %s\tcity %s\tstate %s\tpostal %s\n"
	    "country %s\temail %s\tdayphone %s\tfax %s\n",
        dbUserName, dbPassword,
        txHost, txSslPort, txStoreId, PathnameOfKeyFile,
        username, password, firstname, lastname,
        addr1,addr2, city, state, postal,
        country, email, dayphone, fax);
    return 0;
}
