/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
 *            main.cc
 *
 *  Fri Jul 13 12:38:45 CEST 2007
 *  Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen
 *  deva@aasimon.org and elsenator@gmail.com
 ****************************************************************************/

/*
 *  This file is part of Pracro.
 *
 *  Pracro is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  Pracro is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Pracro; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
 */

#include <QApplication>
#include <QObject>
#include <QEvent>
#include <QStringList>
#include <QSettings>

#include <QTranslator>

#include "netcom.h"
#include "mainwindow.h"

#define CPR_DEFAULT ""
#define MACRO_DEFAULT ""
#define TEMPLATE_DEFAULT ""
#define USER_DEFAULT "testuser"
#define CONFIG_DEFAULT "pracro.ini"

QString cpr = CPR_DEFAULT;
QString user = USER_DEFAULT;
QString config = CONFIG_DEFAULT;
QString host;
quint16 port;

static void print_usage()
{
  printf("Usage: pracro -m MACRO -c CPR -U USER\n");
  printf("Executes the requested Pracro MACRO using supplied CPR and USER.\n");
  printf("\n");
  printf("  -h, --help                Displays this help text.\n");
  /*
  printf("  -m, --macro MACRO         Requests macro MACRO from the Pracro \n"
         "                            Server, defaults to \""MACRO_DEFAULT"\".\n");
  */
  printf("  -t, --template TEMPLATE   Requests template TEMPLATE from the Pracro \n"
         "                            Server, defaults to \""TEMPLATE_DEFAULT"\".\n");
  printf("  -C, --cpr CPR             Defines the cpr for use with the macro,\n"
         "                            defaults to \""CPR_DEFAULT"\".\n");
  printf("  -c, --config FILE         The configfile to use. Default is \""CONFIG_DEFAULT"\"\n");
  printf("  -u, -U, --user USER       Defines the requesting user(not the patient),\n"
         "                            defaults to \""USER_DEFAULT"\"\n");
  //  printf("  -t, --test macro          Run client in testmode, i.e. run without contactig any\n"
  //         "                            servers. The macro must be a local xml file.\n");
}

static void print_version()
{
  printf("Pracro v"VERSION"\n");
}

static QString getParam(QStringList &args, QStringList::iterator &arg)
{
  arg++;
  if(arg == args.end() || arg->at(0) == '-') {
    print_usage();
    exit(1);
  }
  return *arg;
}

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  QString macro = MACRO_DEFAULT;
  QString templ = TEMPLATE_DEFAULT;

  QStringList args = app.arguments();
  QStringList::iterator arg = args.begin();
  arg++; // Skip program name...
  while(arg != args.end()) {

    if(*arg == "--help" ||
       *arg == "-h") {
      print_usage();
    }
    else if(*arg == "--version" ||
            *arg == "-v") {
      print_version();
    }
    else if(*arg == "--user" ||
            *arg == "-U" ||
            *arg == "-u") {
      user = getParam(args,arg); 
    }
    /*
    else if(*arg == "--macro" ||
            *arg == "-m") {
      macro = getParam(args, arg);
    }
    */
    else if(*arg == "--template" ||
            *arg == "-t") {
      templ = getParam(args, arg);
    }
    else if(*arg == "--cpr" ||
            *arg == "-C") {
      cpr = getParam(args, arg); 
    }
    else if(*arg == "--config" ||
            *arg == "-c") {
      config = getParam(args, arg); 
    }
    else {
      print_version();
      print_usage();
      return 1;
    }

    arg++;
  }

  QSettings settings(config, QSettings::IniFormat);

  settings.beginGroup("server");
  host = settings.value("host").toString();
  port = settings.value("port").toInt();
  settings.endGroup();

  QTranslator translator;
  translator.load("pracro_dk");
  app.installTranslator(&translator);

  MainWindow mainwindow(cpr, templ, host, port, user);
  mainwindow.show();

  int ret = app.exec();

  return ret;
}