// Copyright 2019-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#import <XCTest/XCTest.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wprivate-header"
#import "MDCBottomDrawerContainerViewController.h"
#pragma clang diagnostic pop
#import "MDCBottomDrawerPresentationController.h"
#import "MDCBottomDrawerViewController.h"

NS_ASSUME_NONNULL_BEGIN

@interface MDCBottomDrawerPresentationController (Testing)
@property(nonatomic) UIView *scrimView;
@property(nonatomic) UIView *topHandle;
@property(nonatomic) MDCBottomDrawerContainerViewController *bottomDrawerContainerViewController;
@end

@interface MDCBottomDrawerContainerViewController (Testing)
- (void)updateViewWithContentOffset:(CGPoint)contentOffset;
@end

@interface MDCNavigationDrawerPresentationControllerTests : XCTestCase

@end

@implementation MDCNavigationDrawerPresentationControllerTests

- (void)testDismissViewController {
  // Given
  CGRect fakeInitialContentFrame = CGRectMake(0, 0, 200, 300);
  UIViewController *fakeContentViewController = [[UIViewController alloc] init];
  fakeContentViewController.view.frame = fakeInitialContentFrame;
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  fakeBottomDrawer.contentViewController = fakeContentViewController;
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *presentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];
  [presentationController presentationTransitionWillBegin];

  // When
  [presentationController.bottomDrawerContainerViewController
      updateViewWithContentOffset:CGPointMake(0, 100)];
  [presentationController dismissalTransitionDidEnd:YES];

  // Then
  XCTAssertNil(presentationController.topHandle.superview);
  XCTAssertNil(presentationController.scrimView.superview);
  CGRect finalContentFrame = CGRectStandardize(
      presentationController.bottomDrawerContainerViewController.contentViewController.view.frame);
  XCTAssertEqualWithAccuracy(finalContentFrame.origin.x, fakeInitialContentFrame.origin.x, 0.001);
  XCTAssertEqualWithAccuracy(finalContentFrame.origin.y, fakeInitialContentFrame.origin.y, 0.001);
  XCTAssertEqualWithAccuracy(finalContentFrame.size.width, fakeInitialContentFrame.size.width,
                             0.001);
  XCTAssertEqualWithAccuracy(finalContentFrame.size.height, fakeInitialContentFrame.size.height,
                             0.001);
}

- (void)testTraitCollectionDidChangeBlockCalledWithExpectedParameters {
  // Given
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *fakePresentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];
  XCTestExpectation *expectation =
      [[XCTestExpectation alloc] initWithDescription:@"traitCollection"];
  __block UITraitCollection *passedTraitCollection = nil;
  __block MDCBottomDrawerPresentationController *passedPresentationController = nil;
  fakePresentationController.traitCollectionDidChangeBlock =
      ^(MDCBottomDrawerPresentationController *_Nullable presentationController,
        UITraitCollection *_Nullable previousTraitCollection) {
        passedPresentationController = presentationController;
        passedTraitCollection = previousTraitCollection;
        [expectation fulfill];
      };
  UITraitCollection *fakeTraitCollection = [UITraitCollection traitCollectionWithDisplayScale:7];

  // When
  [fakePresentationController traitCollectionDidChange:fakeTraitCollection];

  // Then
  [self waitForExpectations:@[ expectation ] timeout:1];
  XCTAssertEqual(passedPresentationController, fakePresentationController);
  XCTAssertEqual(passedTraitCollection, fakeTraitCollection);
}

- (void)testSettingShouldAlwaysExpandHeader {
  // Given
  UIViewController *fakeContentViewController = [[UIViewController alloc] init];
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  fakeBottomDrawer.contentViewController = fakeContentViewController;
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *presentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];

  // When
  presentationController.shouldAlwaysExpandHeader = YES;
  [presentationController presentationTransitionWillBegin];

  // Then
  XCTAssertTrue(
      presentationController.bottomDrawerContainerViewController.shouldAlwaysExpandHeader);
}

- (void)testShouldIncludeSafeAreaInContentHeight {
  // Given
  UIViewController *fakeContentViewController = [[UIViewController alloc] init];
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  fakeBottomDrawer.contentViewController = fakeContentViewController;
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *presentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];

  // When
  presentationController.shouldIncludeSafeAreaInContentHeight = YES;
  [presentationController presentationTransitionWillBegin];

  // Then
  XCTAssertTrue(presentationController.bottomDrawerContainerViewController
                    .shouldIncludeSafeAreaInContentHeight);
}

- (void)testShouldIncludeSafeAreaInInitialDrawerHeight {
  // Given
  UIViewController *fakeContentViewController = [[UIViewController alloc] init];
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  fakeBottomDrawer.contentViewController = fakeContentViewController;
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *presentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];

  // When
  presentationController.shouldIncludeSafeAreaInInitialDrawerHeight = YES;
  [presentationController presentationTransitionWillBegin];

  // Then
  XCTAssertTrue(presentationController.bottomDrawerContainerViewController
                    .shouldIncludeSafeAreaInInitialDrawerHeight);
}

- (void)testShouldUseStickyStatusBar {
  // Given
  UIViewController *fakeContentViewController = [[UIViewController alloc] init];
  MDCBottomDrawerViewController *fakeBottomDrawer = [[MDCBottomDrawerViewController alloc] init];
  fakeBottomDrawer.contentViewController = fakeContentViewController;
  UIViewController *fakePresentingViewController = [[UIViewController alloc] init];
  MDCBottomDrawerPresentationController *presentationController =
      [[MDCBottomDrawerPresentationController alloc]
          initWithPresentedViewController:fakeBottomDrawer
                 presentingViewController:fakePresentingViewController];

  // When
  presentationController.shouldUseStickyStatusBar = YES;
  [presentationController presentationTransitionWillBegin];

  // Then
  XCTAssertTrue(
      presentationController.bottomDrawerContainerViewController.shouldUseStickyStatusBar);
}

@end

NS_ASSUME_NONNULL_END
