//  RiskController.m
// Part of Risk by Mike Ferris

#import "RiskController.h"
#import "GameSetup.h"
#import "DiceInspector.h"
#import "DeckInspector.h"
#import "CardManager.h"
#import "Mover.h"
#import "DefaultManager.h"
#import <stdlib.h>
#import <strings.h>
#import <appkit/Panel.h>
#import <appkit/publicWraps.h>
#import <appkit/Button.h>
#import "LanguageApp.h"
#import <mach/mach_init.h>
#import <appkit/Speaker.h>
#import <appkit/Listener.h>

@implementation RiskController

+ initialize
{
	if (self == [RiskController class])  {
		[self setVersion:1];
	}
	return self;
}

- appDidInit:sender
{
	infoPanel = nil;
	helpPanel = nil;
	diceInspector = nil;
	deckInspector = nil;
	[mapWindow setExcludedFromWindowsMenu:YES];
	[theGameSetup appDidInit:self];
	[theMover appDidInit:self];
	[theMapView appDidInit:self];
	[theCardManager appDidInit:self];
	[controlPanel setBecomeKeyOnlyIfNeeded:YES];
	return self;
}

- newAction:sender
{
	int ret;
	
	if ([theMover isGameInProgress]) {
		ret = NXRunAlertPanel("Warning", "Are you sure you want to stop and "
							  "clear the game in progress to start a new one?", 
							  "Yes", "Cancel", NULL);
		if (ret == NX_ALERTALTERNATE)  {
			return nil;
		}
	}
	[theGameSetup defaultSetup:self];
	[theGameSetup newGame:self];
	
    return self;
}

#define HELPDIRNAME "Help"
- helpAction:sender
// ask workspace to open a directory browser for the Help directory
{
	int ok=0;
	id ws = [Application workspace];
	char dir[1000];
	
	sprintf(dir, "%s/%s", [NXApp applicationDirectory], HELPDIRNAME);
    if (![ws openFile:dir])  {
		NXRunAlertPanel("Error", "Couldn't open file: %s", "OK", 
						NULL, NULL, dir);
	}
	
    return self;
}

- prefAction:sender
{
	[theDefaultManager showPrefPanel:self];
    return self;
}

- closeAction:sender
{
    return self;
}

- infoAction:sender
{
	if (infoPanel == nil)  {
		[NXApp loadNibSection:"Info.nib" owner:self withNames:NO];
	}
	[infoPanel makeKeyAndOrderFront:self];
	
    return self;
}

#define fcall(a)  [s performRemoteMethod:a]
#define call(a,b) [s performRemoteMethod:a with:b length:strlen(b)+1]
- suggestion:sender {
    char subj[50]="Comments and suggestions for Risk .97";
    char body[100]="Mike,\n\nI wanted to write you regarding Risk.\n";

    id s = [NXApp appSpeaker];
    NXPortFromName("Mail", NULL); // make sure app is launched
    [s setSendPort:NXPortFromName("MailSendDemo", NULL)];

//    sprintf(subj,"Comments and suggestions for Risk .97");
    call("setTo:","mike@trirex.com");
    call("setSubject:",subj);
    call("setBody:",body);
    
    return self;
}

- changeSetupAction:sender
{
	[theGameSetup changeSettings:self];
    return self;
}

- diceInspectorAction:sender
{
	if (diceInspector == nil)  {
		diceInspector = [[DiceInspector allocFromZone:[self zone]] init];
		[theMover setDiceInspector:diceInspector];
	}
	[diceInspector showPanel];
	
    return self;
}

- deckInspectorAction:sender
{
{
	if (deckInspector == nil)  {
		deckInspector = [[DeckInspector allocFromZone:[self zone]] init];
		[theCardManager setDeckInspector:deckInspector];
	}
	[deckInspector showPanel];
	
    return self;
}
}

@end
