// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/ui/translate/language_selection_coordinator.h"

#import "base/logging.h"
#import "ios/chrome/browser/translate/language_selection_delegate.h"
#import "ios/chrome/browser/ui/presenters/contained_presenter.h"
#import "ios/chrome/browser/ui/presenters/contained_presenter_delegate.h"
#import "ios/chrome/browser/ui/presenters/vertical_animation_container.h"
#import "ios/chrome/browser/ui/translate/language_selection_mediator.h"
#import "ios/chrome/browser/ui/translate/language_selection_view_controller.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

@interface LanguageSelectionCoordinator ()<
    LanguageSelectionViewControllerDelegate,
    ContainedPresenterDelegate>
// Presenter to use to for presenting the view controller.
@property(nonatomic) id<ContainedPresenter> presenter;
// The base view controller the instance was initialized with.
@property(nonatomic, weak) UIViewController* baseViewController;
// The view controller this coordinator manages.
@property(nonatomic) LanguageSelectionViewController* selectionViewController;
// A mediator to interoperate with the translation model.
@property(nonatomic) LanguageSelectionMediator* selectionMediator;
// A delegate, provided by showLanguageSelectorWithContext:delegate:.
@property(nonatomic, weak) id<LanguageSelectionDelegate> selectionDelegate;
// YES if the coordinator has started displaying its UI.
@property(nonatomic, readonly) BOOL started;

// Starts displaying the UI for this coordinator, using self.presenter to handle
// the positioning and display of self.selectionViewController.
// It is an error to call this method when self.presenter is nil.
- (void)start;

// Cleans up state after the UI for this coordinator has stopped being
// displayed.
- (void)stop;

@end

@implementation LanguageSelectionCoordinator

@synthesize baseViewController = _baseViewController;
@synthesize presenter = _presenter;
@synthesize selectionViewController = _selectionViewController;
@synthesize selectionMediator = _selectionMediator;
@synthesize selectionDelegate = _selectionDelegate;

- (nullable instancetype)initWithBaseViewController:
    (UIViewController*)viewController {
  if ((self = [super init])) {
    _baseViewController = viewController;
  }
  return self;
}

#pragma mark - private property implementation

- (BOOL)started {
  return self.presenter.presentedViewController != nil;
}

#pragma mark - private methods

- (void)start {
  self.presenter = [[VerticalAnimationContainer alloc] init];
  self.presenter.baseViewController = self.baseViewController;
  self.presenter.presentedViewController = self.selectionViewController;
  self.presenter.delegate = self;

  [self.presenter prepareForPresentation];

  [self.presenter presentAnimated:YES];
}

- (void)stop {
  self.selectionViewController = nil;
  self.selectionMediator = nil;
}

#pragma mark - LanguageSelectionHandler

- (void)showLanguageSelectorWithContext:(LanguageSelectionContext*)context
                               delegate:
                                   (id<LanguageSelectionDelegate>)delegate {
  if (self.started)
    return;

  self.selectionDelegate = delegate;

  self.selectionMediator =
      [[LanguageSelectionMediator alloc] initWithContext:context];

  self.selectionViewController = [[LanguageSelectionViewController alloc] init];
  self.selectionViewController.delegate = self;
  self.selectionMediator.consumer = self.selectionViewController;

  [self start];
}

- (void)dismissLanguageSelector {
  if (!self.started)
    return;

  [self.selectionDelegate languageSelectorClosedWithoutSelection];
  [self.presenter dismissAnimated:NO];
}

#pragma mark - LanguageSelectionViewControllerDelegate

- (void)languageSelectedAtIndex:(int)index {
  [self.selectionDelegate
      languageSelectorSelectedLanguage:
          [self.selectionMediator languageCodeForLanguageAtIndex:index]];
  [self.presenter dismissAnimated:YES];
}

- (void)languageSelectionCanceled {
  [self.selectionDelegate languageSelectorClosedWithoutSelection];
  [self.presenter dismissAnimated:YES];
}

#pragma mark - ContainedPresenterDelegate

- (void)containedPresenterDidPresent:(id<ContainedPresenter>)presenter {
  DCHECK(presenter == self.presenter);
}

- (void)containedPresenterDidDismiss:(id<ContainedPresenter>)presenter {
  DCHECK(presenter == self.presenter);
  [self stop];
}

@end
