#include <CrashTickPrefs.h>

extern struct Config config;
extern APTR mempool;

int NewConfig(struct Window *win)
{
   BOOL res;
   BOOL kg;
   UBYTE buf[40],errorbuf[100];
   struct Node4D Feed4D;
   struct Node4D Aka4D;

   struct Aka *aka;
   struct ConfigNode *cnode;

   strcpy(config.cfg_Sysop,"Sysop");
   res=rtGetString(config.cfg_Sysop,35,getString(PREFS_NEW_TITLE),NULL,
      RTGL_TextFmt,   getString(PREFS_NEW_REQ_SYSOP),
      RTGL_Flags,     GLREQF_CENTERTEXT,
      RT_Window,      win,
      RT_WaitPointer, TRUE,
      RT_LockWindow,  TRUE,
      TAG_END);

   if(!res)
      return(FALSE);

   kg=TRUE;
   buf[0]=0;

   while(kg)
   {
      res=rtGetString(buf,40,getString(PREFS_NEW_TITLE),NULL,
         RTGL_TextFmt,   getString(PREFS_NEW_REQ_AKA),
         RTGL_Flags,     GLREQF_CENTERTEXT,
         RT_Window,      win,
         RT_WaitPointer, TRUE,
         RT_LockWindow,  TRUE,
         TAG_END);

      if(!res)
         return(FALSE);

      kg=FALSE;

      if(!Parse4D(buf,&Aka4D))
      {
         sprintf(errorbuf,getString(CFG_ERR_INVALID_NODE),buf);

         rtEZRequestTags(errorbuf,getString(PREFS_TXT_OK),NULL,NULL,
               RT_Underscore,'_',
               RT_Window,  win,
               RT_WaitPointer, TRUE,
               RT_LockWindow, TRUE,
               TAG_END);

         kg=TRUE;
      }
   }

   buf[0]=0;
   kg=TRUE;

   while(kg)
   {
      res=rtGetString(buf,40,getString(PREFS_NEW_TITLE),NULL,
         RTGL_TextFmt,   getString(PREFS_NEW_REQ_FEED),
         RTGL_Flags,     GLREQF_CENTERTEXT,
         RT_Window,      win,
         RT_WaitPointer, TRUE,
         RT_LockWindow,  TRUE,
         TAG_END);

      if(!res)
         return(FALSE);

      kg=FALSE;

      if(!Parse4D(buf,&Feed4D))
      {
         sprintf(errorbuf,getString(CFG_ERR_INVALID_NODE),buf);

         rtEZRequestTags(errorbuf,getString(PREFS_TXT_OK),NULL,NULL,
               RT_Underscore,'_',
               RT_Window,win,
               RT_WaitPointer, TRUE,
               RT_LockWindow, TRUE,
               TAG_END);

         kg=TRUE;
      }
   }

   strcpy(config.cfg_AutoAddDir,"MAIL:Files/%a");
   res=rtGetString(config.cfg_AutoAddDir,80,getString(PREFS_NEW_TITLE),NULL,
      RTGL_TextFmt,   getString(PREFS_NEW_REQ_AUTOADD),
      RTGL_Flags,     GLREQF_CENTERTEXT,
      RT_Window,      win,
      RT_WaitPointer, TRUE,
      RT_LockWindow,  TRUE,
      TAG_END);

   if(!res)
      return(FALSE);

   Copy4D(&config.cfg_Fake4D,&Aka4D);
   config.cfg_FakePW[0]=0;

   strcpy(config.cfg_Logfile,"PROGDIR:CrashTick.log");
   config.cfg_Loglevel=5;
   config.cfg_LogBufferSecs=3;
   config.cfg_LogBufferLines=10;

   config.cfg_MaxWaitPickup=0;

   config.cfg_Flags = CFG_CHECKCRC | CFG_ALLOWREPLACE | CFG_CHECKSEENBY | CFG_FILENOTE;

   strcpy(config.cfg_Inbound,"MAIL:Inbound");
   strcpy(config.cfg_Outbound,"MAIL:Outbound");
   strcpy(config.cfg_Tickdir,"MAIL:Outbound");
   config.cfg_Filebase[0]=0;
   config.cfg_BadTick[0]=0;

   strcpy(config.cfg_StatsFile,"PROGDIR:CrashTick.stats");
   strcpy(config.cfg_RaidHelp,"PROGDIR:RaidHelp.txt");

   strcpy(config.cfg_ZipExtract,"unzip %a");
   strcpy(config.cfg_ZipAdd,"zip -j %a %f");
   strcpy(config.cfg_LhaExtract,"lha x %a");
   strcpy(config.cfg_LhaAdd,"lha a %a %f");

   strcpy(config.cfg_GroupNames[0],"Default group");

   aka=(struct Aka *)AllocCleared(sizeof(struct Aka));
   cnode=(struct ConfigNode *)AllocCleared(sizeof(struct ConfigNode));

   if(!aka || !cnode)
   {
      if(aka)
         LibFreePooled(mempool,aka,sizeof(struct Aka));

      if(cnode)
         LibFreePooled(mempool,cnode,sizeof(struct ConfigNode));

      rtEZRequestTags(getString(PREFS_ERR_OUT_OF_MEMORY),getString(PREFS_TXT_OK),NULL,NULL,
         RTEZ_Flags,     GLREQF_CENTERTEXT,
         RT_Underscore,'_',
         RT_Window,win,
         RT_WaitPointer, TRUE,
         RT_LockWindow, TRUE,
         TAG_END);

      return(FALSE);
   }

   Copy4D(&aka->Node,&Aka4D);
   jbAddNode(&config.AkaList,(struct jbNode *)aka);

   Copy4D(&cnode->Node,&Feed4D);
   cnode->DefaultGroup='A';
   cnode->Flags = NODE_AUTOADD;

   jbAddNode(&config.CNodeList,(struct jbNode *)cnode);

   rtEZRequestTags(getString(PREFS_NEW_FINISHED),getString(PREFS_TXT_OK),NULL,NULL,
      RTEZ_Flags,     GLREQF_CENTERTEXT,
      RT_Underscore,'_',
      RT_Window,win,
      RT_WaitPointer, TRUE,
      RT_LockWindow, TRUE,
      TAG_END);

   config.configchanged=TRUE;
   return(TRUE);
}
