#include "/Mailbox.h"
#include "/protos.h"
#include <libraries/zbbs.h>
#include "globals.c"

enum { GD_system, GD_user, GD_text, GD_mail, GD_pmail, GD_bulletin, GD_door,
		GD_capture, GD_logfiles, GD_temp, GD_receive, GD_scripts, GD_zurueck };

BOOL CheckPfad(STRPTR);
BOOL AllPaths(VOID);

VOID Pfade()
{
	struct Gadget		*pfadeGadgets[13];
	struct IntuiText	pfadeIText[] = {1, 0, JAM1, 265, 2, NULL, "Pfade einstellen...", NULL};

	if(glist)
	{
		RemoveGList(Win, glist, -1);
		FreeGadgets(glist);
		glist = NULL;
		SetRast(Win->RPort, 0);
	}

	if(!(g = CreateContext(&glist)))
	{
		MyEasyRequest("Konnte Gadget-Context nicht generieren.", "Okay");
		return;
	}

	ng.ng_LeftEdge		= 133;
	ng.ng_TopEdge		= 41;
	ng.ng_Width			= 177;
	ng.ng_Height		= 14;
	ng.ng_GadgetText	= "Systemdaten..:";
	ng.ng_GadgetID		= GD_system;
	ng.ng_Flags			= PLACETEXT_LEFT|NG_HIGHLABEL;
	ng.ng_TextAttr		= &FontAttr,
	ng.ng_VisualInfo	= VisualInfo;

	pfadeGadgets[GD_system] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.system,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 58;
	ng.ng_GadgetText	= "Userdaten....:";
	ng.ng_GadgetID		= GD_user;

	pfadeGadgets[GD_user] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.user,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 75;
	ng.ng_GadgetText	= "Text Files...:";
	ng.ng_GadgetID		= GD_text;

	pfadeGadgets[GD_text] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.text,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 92;
	ng.ng_GadgetText	= "Mail.........:";
	ng.ng_GadgetID		= GD_mail;

	pfadeGadgets[GD_mail] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.mail,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 109;
	ng.ng_GadgetText	= "Private Mail.:";
	ng.ng_GadgetID		= GD_pmail;

	pfadeGadgets[GD_pmail] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.pmail,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 126;
	ng.ng_GadgetText	= "Bulletins....:";
	ng.ng_GadgetID		= GD_bulletin;

	pfadeGadgets[GD_bulletin] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.bulletin,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_LeftEdge		= 450;
	ng.ng_TopEdge		= 41;
	ng.ng_GadgetText	= "Doors........:";
	ng.ng_GadgetID		= GD_door;

	pfadeGadgets[GD_door] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.door,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 58;
	ng.ng_GadgetText	= "Capture......:";
	ng.ng_GadgetID		= GD_capture;

	pfadeGadgets[GD_capture] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.capture,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 75;
	ng.ng_GadgetText	= "Logfiles.....:";
	ng.ng_GadgetID		= GD_logfiles;

	pfadeGadgets[GD_logfiles] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.log,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 92;
	ng.ng_GadgetText	= "Temp. Daten..:";
	ng.ng_GadgetID		= GD_temp;

	pfadeGadgets[GD_temp] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.temp,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 109;
	ng.ng_GadgetText	= "Receive Files:";
	ng.ng_GadgetID		= GD_receive;

	pfadeGadgets[GD_receive] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.receive,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_TopEdge		= 126;
	ng.ng_GadgetText	= "Scripts......:";
	ng.ng_GadgetID		= GD_scripts;

	pfadeGadgets[GD_scripts] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.scripts,
		GTST_MaxChars,	40,
		TAG_DONE);

	ng.ng_LeftEdge		= 560;
	ng.ng_TopEdge		= 180;
	ng.ng_Width			= 66;
	ng.ng_Height		= 16;
	ng.ng_GadgetText	= "Zurück";
	ng.ng_GadgetID		= GD_zurueck;
	ng.ng_Flags			= PLACETEXT_IN;

	pfadeGadgets[GD_zurueck] =
	g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE);

	if(!g)
	{
		MyEasyRequest("Konnte Gadgets nicht generieren.", "Okay");
		return;
	}

	AddGList(Win, glist, 0, -1, NULL);
	RefreshGList(glist, Win, NULL, -1);
	GT_RefreshWindow(Win, NULL);

	PrintIText(Win->RPort, pfadeIText, Win->BorderLeft, Win->BorderTop);
	ActivateGadget(pfadeGadgets[GD_system], Win, NULL);

	while(TRUE)
	{
		Wait(1L << Win->UserPort->mp_SigBit);

		while(imsg = GT_GetIMsg(Win->UserPort))
		{
			class	= imsg->Class;
			code	= imsg->Code;
			g		= imsg->IAddress;

			GT_ReplyIMsg(imsg);

			if(class == IDCMP_GADGETUP)
			{
				switch(g->GadgetID)
				{
					case GD_system:
						if(CheckPfad(Config.system))
							ActivateGadget(pfadeGadgets[GD_user], Win, NULL);
						break;

					case GD_user:
						if(CheckPfad(Config.user))
							ActivateGadget(pfadeGadgets[GD_text], Win, NULL);
						break;

					case GD_text:
						if(CheckPfad(Config.text))
							ActivateGadget(pfadeGadgets[GD_mail], Win, NULL);
						break;

					case GD_mail:
						if(CheckPfad(Config.mail))
							ActivateGadget(pfadeGadgets[GD_pmail], Win, NULL);
						break;

					case GD_pmail:
						if(CheckPfad(Config.pmail))
							ActivateGadget(pfadeGadgets[GD_bulletin], Win, NULL);
						break;

					case GD_bulletin:
						if(CheckPfad(Config.bulletin))
							ActivateGadget(pfadeGadgets[GD_door], Win, NULL);
						break;

					case GD_door:
						if(CheckPfad(Config.door))
							ActivateGadget(pfadeGadgets[GD_capture], Win, NULL);
						break;

					case GD_capture:
						if(CheckPfad(Config.capture))
							ActivateGadget(pfadeGadgets[GD_logfiles], Win, NULL);
						break;

					case GD_logfiles:
						if(CheckPfad(Config.log))
							ActivateGadget(pfadeGadgets[GD_temp], Win, NULL);
						break;

					case GD_temp:
						if(CheckPfad(Config.temp))
							ActivateGadget(pfadeGadgets[GD_receive], Win, NULL);
						break;

					case GD_receive:
						if(CheckPfad(Config.receive))
							ActivateGadget(pfadeGadgets[GD_scripts], Win, NULL);
						break;

					case GD_scripts:
						if(CheckPfad(Config.scripts))
							ActivateGadget(pfadeGadgets[GD_system], Win, NULL);
						break;

					case GD_zurueck:
						if(!AllPaths())
						{
							if(MyEasyRequest("Die Konfiguration kann nicht gespeichert werden,\nwenn nicht alle Pfade angegeben wurden.", "Weiter|Bleiben"))
								return;
						}
						else	return;
						break;
				}
			}
		}
	}
}

BOOL AllPaths()
{
	return(Config.system[0]		&& Config.user[0]		&& Config.text[0]			&&
			Config.mail[0]			&& Config.pmail[0]	&&	Config.bulletin[0]	&&
			Config.door[0]			&& Config.capture[0] &&	Config.log[0]			&&
			Config.temp[0]			&& Config.receive[0] && Config.scripts[0]);
}

BOOL CheckPfad(STRPTR string)
{
	BPTR lock;
	STRPTR path;

	path = ((struct StringInfo *)g->SpecialInfo)->Buffer;

	if(lock = Lock(path, ACCESS_READ))
	{
		UnLock(lock);
		strcpy(string, path);
	}
	else
	{
		if(MyEasyRequest("Dieses Verzeichnis existiert noch nicht.\nSoll es angelegt werden ?", "Ja|Nein"))
		{
			MakePath(path);
			strcpy(string, path);
		}
		else	string[0] = 0;
	}
	if(string[0] &&
		(string[strlen(string) - 1] != '/' && string[strlen(string) -1] != ':'))
	{
		strcpy(&string[strlen(string)], "/");
		strcpy(&path[strlen(path)], "/");
		RefreshGList(g, Win, NULL, 1);
		GT_RefreshWindow(Win, NULL);
	}
	if(!string[0])
	{
		path[0] = 0;
		RefreshGList(g, Win, NULL, 1);
		GT_RefreshWindow(Win, NULL);
		ActivateGadget(g, Win, NULL);
		return(FALSE);
	}
	else	return(TRUE);
}
