/* indent:4  tabsize:8  font:fixed-width */

#import "FTGameDelegate.h"
#import "FTSuitDelegate.h"
#import "../Solitaire/Solitaire.h"
#import "FortyThieves.h"

@implementation FTGameDelegate

- setSuitCardPileViews:(id [])theViews
{
    int i;
    
    for (i=0; i<8; i++)
        suitCardPileViews[i] = *(theViews + i);

    return self;
}


- doubleClickedCard:aCard in:aCardPileView
{
    int i;
    
    id    cardPile = [aCardPileView cardPile];
    
    if ((aCard == [cardPile cardAt:CS_TOP]) && (![aCard isFaceUp]))
    {
        [aCard flip];
        [aCardPileView display];
    }
    else if (aCard == [cardPile cardAt:CS_TOP])
    {
        for (i=0; i<8; i++)
        {
            [[suitCardPileViews[i] delegate]setDoubleClickCheck];
            if ([[suitCardPileViews[i] delegate] canAcceptPile:cardPile
	                                       from:aCardPileView
	                                         in:suitCardPileViews[i]])
            {
                [[suitCardPileViews[i] cardPile] 
		                   addCard:[cardPile cardAt:CS_TOP]];
                [cardPile removeCard:[cardPile cardAt:CS_TOP]];
                [aCardPileView display];
                [suitCardPileViews[i] display];
                [SolGameController() checkForWin];

                break;
            }
        }
    }
    return self;
}


- (BOOL)draggedPile:aCardPile from:aCardPileView
{
    id cardPile = [aCardPileView cardPile];
    id theCard = [aCardPile cardAt:CS_TOP];
    
    // only move the top card
    if([cardPile cardAt:CS_TOP] == theCard)
    {
        return YES;
    }
    return NO;
}


- (BOOL)canAcceptPile:aCardPile from:sender in:aCardPileView
{
    id droppingCard = [aCardPile cardAt:CS_BOTTOM];
    id targetCard = [[aCardPileView cardPile] cardAt:CS_TOP];
    
    if (targetCard)
    {
        if (([targetCard value] == [droppingCard value] + 1) &&
	    ([targetCard suit] == [droppingCard suit]))
        {
            return YES;
        }
    }
    else
    {
        return YES;
    }
    return NO;
}


- getOffset:(float *) xOffset :(float *) yOffset forSize:(CardSize)aSize
{
    *xOffset = 0.0;
    if (aSize == CS_SMALL)
        *yOffset = 20.0;
    else
        *yOffset = 25.0;
        
    return self;
}

@end
