/*
 *  Copyright (C) 2015-2019 Savoir-faire Linux Inc.
 *  Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
 *  Author: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
 */

//Cocoa
#import <Quartz/Quartz.h>

#import "RingWizardWC.h"
#import "AppDelegate.h"
#import "Constants.h"
#import "views/NSImage+Extensions.h"
#import "views/NSColor+RingTheme.h"

@interface RingWizardWC ()

@property (retain, nonatomic)IBOutlet NSView* container;
@property (retain, nonatomic)IBOutlet NSTextField* windowHeader;
@property (retain, nonatomic)IBOutlet NSImageView* ringImage;
@property (retain, nonatomic)IBOutlet NSLayoutConstraint* titleConstraint;

@end
@implementation RingWizardWC {
    IBOutlet RingWizardNewAccountVC* newAccountWC;
    IBOutlet RingWizardLinkAccountVC* linkAccountWC;
    IBOutlet RingWizardChooseVC* chooseActiontWC;
    IBOutlet AddSIPAccountVC* addSIPAccountVC;
    IBOutlet ConnectToAccManagerVC* connectToAccManagerVC;
    IBOutlet AccountBackupVC* accountBackupVC;
    BOOL isCancelable;
}

@synthesize accountModel, ringImage, titleConstraint;

-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil accountmodel:(lrc::api::NewAccountModel*) accountModel;
{
    if (self =  [self initWithWindowNibName:nibNameOrNil])
    {
        self.accountModel = accountModel;
    }
    return self;
}

- (void)windowDidLoad
{
    [super windowDidLoad];
    newAccountWC = [[RingWizardNewAccountVC alloc] initWithNibName:@"RingWizardNewAccount" bundle:nil accountmodel:self.accountModel];

    chooseActiontWC = [[RingWizardChooseVC alloc] initWithNibName:@"RingWizardChoose" bundle:nil];
    linkAccountWC = [[RingWizardLinkAccountVC alloc] initWithNibName:@"RingWizardLinkAccount" bundle:nil accountmodel:self.accountModel];
    addSIPAccountVC = [[AddSIPAccountVC alloc] initWithNibName:@"AddSIPAccountVC" bundle:nil accountmodel:self.accountModel];
    connectToAccManagerVC = [[ConnectToAccManagerVC alloc] initWithNibName:@"ConnectToAccManagerVC" bundle:nil accountmodel:self.accountModel];
    accountBackupVC = [[AccountBackupVC alloc] initWithNibName:@"AccountBackupVC" bundle:nil accountmodel:self.accountModel];
    [addSIPAccountVC setDelegate:self];
    [chooseActiontWC setDelegate:self];
    [linkAccountWC setDelegate:self];
    [newAccountWC setDelegate:self];
    [accountBackupVC setDelegate:self];
    [connectToAccManagerVC setDelegate:self];
    [self showChooseWithCancelButton:isCancelable];
}

- (void)removeSubviews
{
    while ([self.container.subviews count] > 0)
    {
        [[self.container.subviews firstObject] removeFromSuperview];
    }
}

- (void)showView:(NSView*)view
{
    [self removeSubviews];
    [self.container setFrameSize:view.frame.size];
    [self.container addSubview:view];
}

- (void)showChooseWithCancelButton:(BOOL)showCancel
{
    [self.windowHeader setStringValue: NSLocalizedString(@"Welcome to Jami",
                                                         @"Welcome title")];
    [ringImage setHidden: NO];
    [chooseActiontWC showInitialwithCancell:showCancel];
    isCancelable = showCancel;
    [self showView:chooseActiontWC.view];
}

- (void)showNewAccountVC:(BOOL) isRendezvous
{
    NSString* title = isRendezvous ? NSLocalizedString(@"Create rendezvous",
    @"Create rendezvous title") : NSLocalizedString(@"Create a new account",
                                          @"Welcome title");
    [self.windowHeader setStringValue: title];
    [ringImage setHidden: YES];
    titleConstraint.constant = 0;
    [newAccountWC prepareViewToShow: isRendezvous];
    [self showView: newAccountWC.view];
    [newAccountWC show];
}

- (void)showImportWithType:(IMPORT_TYPE)type
{
    auto header = type == IMPORT_FROM_DEVICE ?
    NSLocalizedString(@"Import from other device",
                      @"link account title") :
    NSLocalizedString(@"Import from backup",
                      @"link account title");

    [self.windowHeader setStringValue: header];
    [ringImage setHidden: YES];
    titleConstraint.constant = 0;
    [self showView: linkAccountWC.view];
    [linkAccountWC showImportViewOfType: type];
}

- (void)showSIPAccountVC
{
    [self.windowHeader setStringValue: NSLocalizedString(@"Add a SIP account",
                                                         @"Welcome title")];
    [ringImage setHidden: YES];
    titleConstraint.constant = 0;
    [self showView: addSIPAccountVC.view];
    [addSIPAccountVC show];
}

- (void)showConnectToAccountManager
{
    [self.windowHeader setStringValue: NSLocalizedString(@"Sign In",
                                                         @"Sign In")];
    [ringImage setHidden: YES];
    titleConstraint.constant = 0;
    [self showView: connectToAccManagerVC.view];
    [connectToAccManagerVC show];
}

# pragma NSWindowDelegate methods

- (void)windowWillClose:(NSNotification *)notification
{
    if (!isCancelable){
        AppDelegate* appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];
        if ([appDelegate checkForRingAccount]) {
            [appDelegate showMainWindow];
        }
    }
}

#pragma - WizardChooseDelegate methods

- (void)didCompleteWithAction:(WizardAction)action
{
    switch (action) {
        case WIZARD_ACTION_IMPORT_FROM_DEVICE:
            [self showImportWithType: IMPORT_FROM_DEVICE];
            break;
        case WIZARD_ACTION_IMPORT_FROM_ADCHIVE:
            [self showImportWithType: IMPORT_FROM_BACKUP];
            break;
        case WIZARD_ACTION_NEW:
            [self showNewAccountVC: false];
            break;
        case WIZARD_ACTION_ADVANCED:
            [self showView:chooseActiontWC.view];
            break;
        case WIZARD_ACTION_SIP_ACCOUNT:
            [self showSIPAccountVC];
            break;
        case WIZARD_ACTION_ACCOUNT_MANAGER:
            [self showConnectToAccountManager];
            break;
        case WIZARD_ACTION_RENDEZVOUS:
            [self showNewAccountVC: true];
            break;
        default:
            [self.window close];
            [NSApp endSheet:self.window];
            [[NSApplication sharedApplication] removeWindowsItem:self.window];
            break;
    }
}

#pragma - WizardCreateAccountDelegate methods

- (void)didCreateAccountWithSuccess:(BOOL)success accountId:(const QString&)accountId;
{
    BOOL skipBackup = [[NSUserDefaults standardUserDefaults] boolForKey: SkipBackUpPage];
    if (skipBackup || !success) {
        [self completedWithSuccess:success];
        return;
    }
    [self showBackUpAccount: accountId];
}

#pragma - WizardLinkAccountDelegate methods

- (void)didLinkAccountWithSuccess:(BOOL)success
{
    [self completedWithSuccess:success];
}

#pragma - RingWizardAccManagerDelegate

- (void)didSignInSuccess:(BOOL)success {
    [self completedWithSuccess:success];
}

- (void)showBackUpAccount:(const QString&)accountId{
    [self.windowHeader setStringValue: NSLocalizedString(@"Backup your account",
                                                         @"Backup account")];
    [ringImage setHidden: YES];
    titleConstraint.constant = 0;
    accountBackupVC.accountToBackup = accountId;
    [self showView: accountBackupVC.view];
    [accountBackupVC show];
}

-(void) completedWithSuccess:(BOOL) success {
    if (success) {
        [self.window close];
        [NSApp endSheet:self.window];
        [[NSApplication sharedApplication] removeWindowsItem:self.window];
        if (!isCancelable){
            AppDelegate* appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];
            [appDelegate showMainWindow];
        }
    } else {
        [self showChooseWithCancelButton: isCancelable];
    }
}

@end
