// Copyright 2018 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/sad_tab/sad_tab_view_controller.h"

#include <CoreGraphics/CoreGraphics.h>

#import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
#import "ios/chrome/browser/ui/sad_tab/sad_tab_view.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
#import "ios/chrome/common/ui_util/constraints_ui_util.h"
#include "url/gurl.h"

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

@interface SadTabViewController ()<SadTabViewDelegate>

@property(nonatomic) SadTabView* sadTabView;

// Scroll view is required by OverscrollActionsController and will be a parent
// view of the sad tab view.
@property(nonatomic) UIScrollView* scrollView;

// Allows supporting Overscroll Actions UI, which is displayed when Sad Tab is
// pulled down.
@property(nonatomic) OverscrollActionsController* overscrollActionsController;

@end

@implementation SadTabViewController

@synthesize repeatedFailure = _repeatedFailure;
@synthesize offTheRecord = _offTheRecord;
@synthesize sadTabView = _sadTabView;
@synthesize scrollView = _scrollView;
@synthesize overscrollActionsController = _overscrollActionsController;
@synthesize overscrollDelegate = _overscrollDelegate;

#pragma mark - UIViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // Scroll view is required by OverscrollActionsController and will be a parent
  // view of the sad tab view.
  self.scrollView = [[UIScrollView alloc] init];
  self.scrollView.showsVerticalScrollIndicator = NO;
  [self.view addSubview:self.scrollView];
  self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
  AddSameConstraints(self.scrollView, self.view);

  // SadTabView is a child of the scroll view as reqired by
  // OverscrollActionsController.
  SadTabViewMode mode =
      self.repeatedFailure ? SadTabViewMode::FEEDBACK : SadTabViewMode::RELOAD;
  self.sadTabView =
      [[SadTabView alloc] initWithMode:mode offTheRecord:self.offTheRecord];
  self.sadTabView.delegate = self;
  [self.scrollView addSubview:self.sadTabView];

  // OverscrollActionsController allows Overscroll Actions UI.
  self.overscrollActionsController =
      [[OverscrollActionsController alloc] initWithScrollView:self.scrollView];
  self.overscrollActionsController.delegate = self.overscrollDelegate;
  self.scrollView.delegate = self.overscrollActionsController;
  OverscrollStyle style = self.offTheRecord
                              ? OverscrollStyle::REGULAR_PAGE_INCOGNITO
                              : OverscrollStyle::REGULAR_PAGE_NON_INCOGNITO;
  [self.overscrollActionsController setStyle:style];
  [self updateOverscrollActionsState];
}

- (void)viewDidLayoutSubviews {
  [super viewDidLayoutSubviews];

  // In order to allow UIScollView to scroll vertically, the height of the
  // content should be taller than the hight of the scroll view.
  CGRect newFrame = self.view.bounds;
  newFrame.size.height += 1;
  self.sadTabView.frame = newFrame;
  [self.scrollView setContentSize:newFrame.size];
}

- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
  [super traitCollectionDidChange:previousTraitCollection];
  [self updateOverscrollActionsState];
}

#pragma mark - SadTabViewDelegate

- (void)sadTabViewShowReportAnIssue:(SadTabView*)sadTabView {
  [self.delegate sadTabViewControllerShowReportAnIssue:self];
}

- (void)sadTabView:(SadTabView*)sadTabView
    showSuggestionsPageWithURL:(const GURL&)URL {
  [self.delegate sadTabViewController:self showSuggestionsPageWithURL:URL];
}

- (void)sadTabViewReload:(SadTabView*)sadTabView {
  [self.delegate sadTabViewControllerReload:self];
}

#pragma mark - Private

// Enables or disables overscroll actions.
- (void)updateOverscrollActionsState {
  if (IsSplitToolbarMode(self)) {
    [self.overscrollActionsController enableOverscrollActions];
  } else {
    [self.overscrollActionsController disableOverscrollActions];
  }
}

@end

#pragma mark -

@implementation SadTabViewController (UIElements)

- (UITextView*)messageTextView {
  return self.sadTabView.messageTextView;
}

- (UIButton*)actionButton {
  return self.sadTabView.actionButton;
}

@end
