/*
 Copyright 2017-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 <UIKit/UIKit.h>

#import "MaterialButtons.h"
#import "MaterialButtons+ColorThemer.h"

@interface FloatingButtonExampleViewController : UIViewController
@property(nonatomic, strong) UILabel *iPadLabel;
@property(nonatomic, strong) MDCFloatingButton *miniFloatingButton;
@property(nonatomic, strong) MDCFloatingButton *defaultFloatingButton;
@property(nonatomic, strong) MDCFloatingButton *largeIconFloatingButton;
@property(nonatomic, strong) MDCSemanticColorScheme *colorScheme;
@end

@implementation FloatingButtonExampleViewController

- (id)init {
  self = [super init];
  if (self) {
    self.colorScheme = [[MDCSemanticColorScheme alloc] init];
  }
  return self;
}

- (void)viewDidLoad {
  [super viewDidLoad];

  self.view.backgroundColor = [UIColor colorWithWhite:0.9f alpha:1];

  UIImage *plusImage =
      [[UIImage imageNamed:@"Plus"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  UIImage *plusImage36 = [UIImage imageNamed:@"plus_white_36"
                                    inBundle:[NSBundle bundleForClass:[self class]]
               compatibleWithTraitCollection:self.traitCollection];
  plusImage36 = [plusImage36 imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

  self.iPadLabel = [[UILabel alloc] init];
  self.iPadLabel.text = @"Try me on an iPad!";

  self.miniFloatingButton = [[MDCFloatingButton alloc] initWithFrame:CGRectZero
                                                               shape:MDCFloatingButtonShapeMini];
  self.miniFloatingButton.translatesAutoresizingMaskIntoConstraints = NO;
  [self.miniFloatingButton setImage:plusImage forState:UIControlStateNormal];
  [self.miniFloatingButton setMinimumSize:CGSizeMake(96, 40)
                                 forShape:MDCFloatingButtonShapeMini
                                   inMode:MDCFloatingButtonModeExpanded];
  [MDCFloatingButtonColorThemer applySemanticColorScheme:self.colorScheme
                                                toButton:self.miniFloatingButton];

  self.defaultFloatingButton = [[MDCFloatingButton alloc] init];
  self.defaultFloatingButton.translatesAutoresizingMaskIntoConstraints = NO;
  [self.defaultFloatingButton setImage:plusImage forState:UIControlStateNormal];
  [MDCFloatingButtonColorThemer applySemanticColorScheme:self.colorScheme
                                                toButton:self.defaultFloatingButton];

  self.largeIconFloatingButton = [[MDCFloatingButton alloc] init];
  self.largeIconFloatingButton.translatesAutoresizingMaskIntoConstraints = NO;
  [self.largeIconFloatingButton setImage:plusImage36 forState:UIControlStateNormal];
  [self.largeIconFloatingButton setContentEdgeInsets:UIEdgeInsetsMake(-6, -6, -6, 0)
                                            forShape:MDCFloatingButtonShapeDefault
                                              inMode:MDCFloatingButtonModeExpanded];
  [MDCFloatingButtonColorThemer applySemanticColorScheme:self.colorScheme
                                                toButton:self.largeIconFloatingButton];

  [self.view addSubview:self.iPadLabel];
  [self.view addSubview:self.miniFloatingButton];
  [self.view addSubview:self.defaultFloatingButton];
  [self.view addSubview:self.largeIconFloatingButton];
}

- (void)viewDidLayoutSubviews {
  [super viewDidLayoutSubviews];

  [self.iPadLabel sizeToFit];
  [self.largeIconFloatingButton sizeToFit];
  [self.defaultFloatingButton sizeToFit];
  [self.miniFloatingButton sizeToFit];

  CGFloat totalUsedHeight = self.iPadLabel.intrinsicContentSize.height +
      self.miniFloatingButton.intrinsicContentSize.height +
      self.defaultFloatingButton.intrinsicContentSize.height +
      self.largeIconFloatingButton.intrinsicContentSize.height;

  CGRect bounds = self.view.bounds;
  if (totalUsedHeight > CGRectGetHeight(bounds)) {
    totalUsedHeight -= self.iPadLabel.intrinsicContentSize.height;
    self.iPadLabel.hidden = YES;
  }

  CGFloat remainingMargins = MAX(0, CGRectGetHeight(bounds) - totalUsedHeight);
  NSInteger interViewGapCount = self.iPadLabel.hidden ? 2 : 3;
  CGFloat interViewSpacing = MIN(20, remainingMargins / interViewGapCount);
  CGFloat viewYOffset = (remainingMargins - interViewSpacing * interViewGapCount) / 2;

  CGSize miniFabSize = self.miniFloatingButton.intrinsicContentSize;
  CGSize defaultFabSize = self.defaultFloatingButton.intrinsicContentSize;
  CGSize largeIconFabSize = self.largeIconFloatingButton.intrinsicContentSize;

  CGFloat xOffset = CGRectGetMinX(bounds) + 20;
  if (!self.iPadLabel.hidden) {
    self.iPadLabel.center =
        CGPointMake(CGRectGetMidX(bounds),
                    viewYOffset + self.iPadLabel.intrinsicContentSize.height / 2);
    viewYOffset += self.iPadLabel.intrinsicContentSize.height + interViewSpacing;
  }

  self.miniFloatingButton.center =
      CGPointMake(xOffset + miniFabSize.width / 2 + (defaultFabSize.width - miniFabSize.width) / 2,
                  viewYOffset + miniFabSize.height / 2);
  viewYOffset += miniFabSize.height + interViewSpacing;
  self.defaultFloatingButton.center =
      CGPointMake(xOffset + defaultFabSize.width / 2, viewYOffset + defaultFabSize.height / 2);
  viewYOffset += defaultFabSize.height + interViewSpacing;
  self.largeIconFloatingButton.center =
      CGPointMake(xOffset + largeIconFabSize.width / 2, viewYOffset + largeIconFabSize.height / 2);
}

- (void)updateFloatingButtonsWhenSizeClassIsRegularRegular:(BOOL)isRegularRegular {
  if (isRegularRegular) {
    self.miniFloatingButton.mode = MDCFloatingButtonModeExpanded;
    [self.miniFloatingButton setTitle:@"Add" forState:UIControlStateNormal];
    self.defaultFloatingButton.mode = MDCFloatingButtonModeExpanded;
    [self.defaultFloatingButton setTitle:@"Create" forState:UIControlStateNormal];
    self.largeIconFloatingButton.mode = MDCFloatingButtonModeExpanded;
    [self.largeIconFloatingButton setTitle:@"Create" forState:UIControlStateNormal];
  } else {
    self.miniFloatingButton.mode = MDCFloatingButtonModeNormal;
    [self.miniFloatingButton setTitle:nil forState:UIControlStateNormal];
    self.defaultFloatingButton.mode = MDCFloatingButtonModeNormal;
    [self.defaultFloatingButton setTitle:nil forState:UIControlStateNormal];
    self.largeIconFloatingButton.mode = MDCFloatingButtonModeNormal;
    [self.largeIconFloatingButton setTitle:nil forState:UIControlStateNormal];
  }
}

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  UIUserInterfaceSizeClass horizontalSizeClass = self.traitCollection.horizontalSizeClass;
  UIUserInterfaceSizeClass verticalSizeClass = self.traitCollection.verticalSizeClass;
  if (horizontalSizeClass == UIUserInterfaceSizeClassRegular &&
      verticalSizeClass == UIUserInterfaceSizeClassRegular) {
    [self updateFloatingButtonsWhenSizeClassIsRegularRegular:YES];
  } else {
    [self updateFloatingButtonsWhenSizeClassIsRegularRegular:NO];
  }
}

- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection
              withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];

  UITraitCollection *currentTraits = self.traitCollection;
  BOOL sizeClassChanged = currentTraits.horizontalSizeClass != newCollection.horizontalSizeClass ||
      currentTraits.verticalSizeClass != newCollection.verticalSizeClass;
  if (sizeClassChanged) {
    BOOL isRegularRegular = newCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular &&
        newCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular;
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
      [self updateFloatingButtonsWhenSizeClassIsRegularRegular:isRegularRegular];
    } completion:nil];
  }
}

#pragma mark - Catalog by Convention

+ (NSArray<NSString *> *)catalogBreadcrumbs {
  return @[ @"Buttons", @"Floating Action Button" ];
}

+ (BOOL)catalogIsPrimaryDemo {
  return NO;
}

+ (BOOL)catalogIsPresentable {
  return YES;
}

@end
