//
//  GameOverLayer.m
//  Cart Collect
//
//  Created by iD Student Account on 7/19/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "GameOverScene.h"
#import "Cart_CollectAppDelegate.h"
#import <sqlite3.h>
#import "cocoslive.h"
#import "MainMenuLayer.h"

@implementation GameOverScene

+ (GameOverScene*)sceneWithScore:(int)score
{
    return [[[GameOverScene alloc] initWithScore:score] autorelease];
}

- (id)initWithScore:(int)score2
{
    self = [super init];
	
	if (nil != self)
	{
        CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
        [self addChild:backgroundLayer];
        
        theLayer = [CCLayer node];
        [self addChild:theLayer];
        
		CCSprite* backgroundImage = [CCSprite spriteWithFile:@"Morning1.png"];
		backgroundImage.position = ccp(240, 160);
		[theLayer addChild:backgroundImage z:0];

		score = score2;
        
        movingLayer = [[UIView alloc] initWithFrame:CGRectMake(0, -320, 480, 320)];
        movingLayer.backgroundColor = [UIColor clearColor];
        [[[CCDirector sharedDirector] openGLView] addSubview:movingLayer];
        
        scoreField = [[UILabel alloc] initWithFrame:CGRectMake(205, 320-200, 0, 0)];
        [scoreField setFont:[UIFont systemFontOfSize:20.0f]];
        [scoreField setBackgroundColor:[UIColor clearColor]];
        [scoreField setText:[NSString stringWithFormat:@"%d", score2]];
        CGSize labelSize = [scoreField.text sizeWithFont:scoreField.font constrainedToSize:CGSizeMake(160, 31) lineBreakMode:UILineBreakModeClip];
        [scoreField setFrame:CGRectMake(scoreField.frame.origin.x, scoreField.frame.origin.y, labelSize.width, labelSize.height)];
        [movingLayer addSubview:scoreField];
		
		textField = [[UITextField alloc] initWithFrame:CGRectMake(205, 320-247, 216, 31)];
        [textField setFont:[UIFont systemFontOfSize:20.0f]];
        [textField setBackgroundColor:[UIColor clearColor]];
		[textField setDelegate:self];
		NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
		[textField setText:[defaults objectForKey:@"username"]];
        [movingLayer addSubview:textField];
        
        submitSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(211, 320-161, 0, 0)];
        [submitSwitch setOn:[defaults boolForKey:@"submitScore"]];
        [movingLayer addSubview:submitSwitch];
        
        activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(480-20-10, 320-20-10, 20, 20)];
        [movingLayer addSubview:activityIndicator];
		
        backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [backButton setFrame:CGRectMake(240-154/2, 320-60-15, 154, 31)];
        [backButton setTitle:@"Back to Main Menu" forState:UIControlStateNormal];
        [backButton addTarget:self action:@selector(newgame) forControlEvents:UIControlEventTouchUpInside];
        [backButton.titleLabel setFont:[UIFont systemFontOfSize:16.0]];
        [backButton.titleLabel setTextColor:[UIColor blackColor]];
        [movingLayer addSubview:backButton];
	}
	
	return self;
}

- (void)setPosition:(CGPoint)position
{
    [super setPosition:position];
    movingLayer.center = CGPointMake(240, 160-position.y);
}

- (void)newgame
{
    backButton.enabled = NO;
    textField.enabled = NO;
    submitSwitch.enabled = NO;
	
	const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score, gameMode) VALUES (\"%@\",%d,\"Collect\")", [textField text], score] UTF8String];
	sqlite3_stmt* compiled_statement;
	
	if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK)
	{
		sqlite3_step(compiled_statement);
		NSLog(@"awesome, %@, %d", [textField text], score);
	} else {
		NSLog(@"Error while adding highscore to local highscore list. '%s'", sqlite3_errmsg([Cart_CollectAppDelegate database]));
	}
	
    if (submitSwitch.on)
    {
        [self submitScore];
    } else {
        [self exit];
    }
}

- (void)submitScore
{	
    [activityIndicator startAnimating];
    
	CLScoreServerPost* server = [[CLScoreServerPost alloc] initWithGameName:@"Cart Collect" gameKey:@"38f440a074b3264386455a36b2706d8f" delegate:self];
	NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
	[dict setObject:@"Classic" forKey:@"cc_category"];
	[dict setObject:[textField text] forKey:@"cc_playername"];
	[dict setObject:[NSNumber numberWithInt:score] forKey:@"cc_score"];
	[server sendScore:dict];
	[server release];
    [dict release];
}

- (BOOL)textFieldShouldReturn:(UITextField *)m_textField
{
	[m_textField resignFirstResponder];
	
	return YES;
}

- (void)scorePostOk:(id)sender
{
    [activityIndicator stopAnimating];
    
    // Score post successful
	[self exit];
}

- (void)scorePostFail:(id)sender
{
    [activityIndicator stopAnimating];
    
    // score post failed
    tPostStatus status = [sender postStatus];
    if( status == kPostStatusPostFailed ) {
		NSLog(@"SERVER ERROR");
        // an error with the server ?
        // try again
    }else if( status == kPostStatusConnectionFailed ) {
		NSLog(@"CONNECTION FAILURE");
        // a error establishing the connection ?
        // turn-on wifi, and then try again
    }
	
	UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Whoops" message:@"There was an error posting your score. Please make sure you have Internet access." delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Cancel", nil];
	[alertView show];
    [alertView release];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
	if (buttonIndex == 0)
	{
		[self submitScore];
	} else if (buttonIndex == 1)
	{
		[self exit];
	}
}

- (void)exit
{
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
	[defaults setObject:[textField text] forKey:@"username"];
    [defaults setBool:submitSwitch.on forKey:@"submitScore"];
    
    [submitSwitch removeFromSuperview];
    [submitSwitch release];
	
	[textField removeFromSuperview];
	[textField release];
    
    [scoreField removeFromSuperview];
    [scoreField release];
    
    [activityIndicator removeFromSuperview];
    [activityIndicator release];
    
    [backButton removeFromSuperview];
    
    [movingLayer removeFromSuperview];
    [movingLayer release];
	
	[[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]];
}

@end