/*
 Application info controller

 Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz

 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
 If a copy of the MPL was not distributed with this file, You can obtain one at
 http://mozilla.org/MPL/2.0/.
 */

#import "AboutController.h"
#import "Utils.h"
#import "BlockAlertView.h"

@implementation AboutController

// The designated initializer.  Override if you create the controller programmatically and want to
// perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
	if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]))
	{

		// set title and tab-bar image
		[self setTitle:NSLocalizedString(@"About", @"About Controller title")];
		UIImage *tabBarIcon = [UIImage
		    imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tabbar_icon_about"
		                                                            ofType:@"png"]];
		[self setTabBarItem:[[[UITabBarItem alloc]
		                        initWithTitle:NSLocalizedString(@"About", @"Tabbar item about")
		                                image:tabBarIcon
		                                  tag:0] autorelease]];

		last_link_clicked = nil;
	}
	return self;
}

- (void)dealloc
{
	[super dealloc];
	[last_link_clicked release];
}

// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
	WKWebViewConfiguration *config = [[[WKWebViewConfiguration alloc] init] autorelease];
	[config setDataDetectorTypes:WKDataDetectorTypeNone];
	webView = [[[WKWebView alloc] initWithFrame:CGRectZero configuration:config] autorelease];
	[webView
	    setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
	[webView setAutoresizesSubviews:YES];
	[webView setNavigationDelegate:self];
	[self setView:webView];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
	[super viewDidLoad];

	NSString *filename = (IsPhone() ? @"about_phone" : @"about");
	NSString *htmlString = [[[NSString alloc]
	    initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename
	                                                           ofType:@"html"
	                                                      inDirectory:@"about_page"]
	                  encoding:NSUTF8StringEncoding
	                     error:nil] autorelease];

	[webView
	    loadHTMLString:[NSString stringWithFormat:htmlString, TSXAppFullVersion(),
	                                              [[UIDevice currentDevice] systemName],
	                                              [[UIDevice currentDevice] systemVersion],
	                                              [[UIDevice currentDevice] model]]
	           baseURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] bundlePath]
	                                              stringByAppendingPathComponent:@"about_page"]]];
}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
	return YES;
}

#pragma mark -
#pragma mark WKWebView callbacks
- (void)webView:(WKWebView *)wv
    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
                    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
	NSURLRequest *request = [navigationAction request];

	if ([[request URL] isFileURL])
	{
		decisionHandler(WKNavigationActionPolicyAllow);
		return;
	}

	if ([navigationAction navigationType] == WKNavigationTypeLinkActivated)
	{
		[last_link_clicked release];
		last_link_clicked = [[[request URL] absoluteString] retain];
		BlockAlertView *alert = [BlockAlertView
		    alertWithTitle:NSLocalizedString(@"External Link", @"External Link Alert Title")
		           message:[NSString stringWithFormat:
		                                 NSLocalizedString(
		                                     @"Open [%@] in Browser?",
		                                     @"Open link in browser (with link as parameter)"),
		                                 last_link_clicked]];

		[alert setCancelButtonWithTitle:NSLocalizedString(@"No", @"No Button") block:nil];
		[alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK Button")
		                    block:^{
			                    [[UIApplication sharedApplication]
			                                  openURL:[NSURL URLWithString:last_link_clicked]
			                                  options:@{}
			                        completionHandler:nil];
		                    }];

		[alert show];

		decisionHandler(WKNavigationActionPolicyCancel);
		return;
	}

	decisionHandler(WKNavigationActionPolicyAllow);
}

@end
