
#include <utility/hooks.h>

#include "sumstl.h"

#include <stdio.h>

#ifdef __SASC
#include <dos.h>
#endif

#include "umsfilter.h"

/* SMAKE */


// Version String
// --------------

static char VersionString[] = "$VER: sumsdel "VERSION;

static char UsageString[] = "\
   U=User     : user name.\n\
   P=Password : user's password.\n\
  FI=Filter   : filter specification.\n\
   S=Server   : server name.\n\
   Q=Quiet    : work quietly\n\
   T=Tiny     : use tiny output\n\n\
";


// Template
// --------

static char *TemplateString = "U=User=Name/A,P=Password/A,FI=Filter/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
enum opts {
	OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_SERVER,
	OPT_QUIET, OPT_TINY, OPT_COUNT};


// Globals
// -------

extern struct DosLibrary *DOSBase;

struct Library *UMSBase = NULL;


// CTRL-C Stuff
// ------------

int brk(void)
{
	return(0);
}

#define ABORTED (SetSignal(0,0) & SIGBREAKF_CTRL_C)


// Main Function
// -------------

int main(int argc,char *argv[])
{
	int 			erg = RETURN_FAIL;
	int				anz = 0;
	int				fi;
	LONG			nr=0,umserr;
	struct RDArgs	*args_ptr;
	LONG			opts[OPT_COUNT] = { 0 };
	UMSAccount		acc;

	onbreak(brk);

	if (argc<2 || *argv[1] == '?')
	{
		fprintf(stderr,"\33[1m%s\33[0m, written by Bernhard Möllemann, Public Domain.\n\nTemplate: %s\n%s",&VersionString[6],TemplateString,UsageString);
	}

	if (args_ptr = ReadArgs(TemplateString, opts, NULL))
	{

		if (UMSBase = OpenLibrary(UMSNAME,UMSVERSION))
		{
			if (acc = UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
			{
				if (!(fi = UmsFilterExpression((char *)opts[OPT_FILTER],acc,0,0,1)))
				{
					erg = RETURN_OK;
					while (nr = UMSSearchTags(acc,
					                          UMSTAG_SearchLast,	nr,
					                          UMSTAG_SearchLocal,	TRUE,
					                          UMSTAG_SearchMask,	1,
					                          UMSTAG_SearchMatch,	1,
					                          TAG_DONE)) {
						if (ABORTED) {
							fprintf(stderr,"*** User break.\n");
							erg = RETURN_WARN;
							break;
						}

						if ( UMSDeleteMsg(acc,nr) ) {
							anz++;
						} else {
							fprintf(stderr,"UMS-Error %ld: %s\n",umserr=UMSErrNum(acc),UMSErrTxt(acc));
							erg = RETURN_WARN;
							/* kludge for bad behavior of UMSSearchTags() */
							if ( umserr==UMSERR_ServerTerminated ) {
								erg = RETURN_ERROR;
								break;
							}
						}
					}

					if (!opts[OPT_QUIET])
						if (opts[OPT_TINY])
							printf("%5ld Msgs deleted.\n",anz);
						else
							printf("%5ld Msgs (%s) deleted.\n",anz,(char *)opts[OPT_FILTER]);
					/* if an error occured and no msg was deleted bump warn to error */
					if ( (erg==RETURN_WARN) && (anz==0) )
						erg = RETURN_ERROR;
				}
				else printf("Expression Error %ld\n",fi);

				UMSLogout(acc);
			}
			else printf("UMS-Login failed.\n");

			CloseLibrary(UMSBase);
		}
		else printf("Could not open ums.library V10.\n");

		FreeArgs(args_ptr);
	}
	else
	{
		PrintFault(IoErr(), NULL);
		return RETURN_ERROR;
	}

	return erg;
}
