// 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/tabs/switch_to_tab_animation_view.h"

#include "base/i18n/rtl.h"

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

namespace {
const CGFloat kMiddleMargin = 80;
const CGFloat kAnimationTime = 0.35;
}  // namespace

@implementation SwitchToTabAnimationView

- (instancetype)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  if (self) {
    self.backgroundColor = [UIColor colorWithWhite:0.13 alpha:1];
  }
  return self;
}

- (void)animateFromCurrentView:(UIView*)currentView
                     toNewView:(UIView*)newView
                    inPosition:(SwitchToTabAnimationPosition)position {
  CGRect leftViewInitialFrame = self.bounds;
  CGRect rightViewInitialFrame = self.bounds;
  CGRect leftViewFinalFrame = self.bounds;
  CGRect rightViewFinalFrame = self.bounds;
  UIView* rightView;
  UIView* leftView;

  BOOL directionLeft =
      ((position == SwitchToTabAnimationPositionBefore) &&
       !base::i18n::IsRTL()) ||
      ((position == SwitchToTabAnimationPositionAfter) && base::i18n::IsRTL());

  if (directionLeft) {
    rightView = currentView;
    leftView = newView;
    leftViewInitialFrame.origin.x -= self.bounds.size.width + kMiddleMargin;
    rightViewFinalFrame.origin.x += self.bounds.size.width + kMiddleMargin;
  } else {
    rightView = newView;
    leftView = currentView;
    rightViewInitialFrame.origin.x += self.bounds.size.width + kMiddleMargin;
    leftViewFinalFrame.origin.x -= self.bounds.size.width + kMiddleMargin;
  }

  [self addSubview:rightView];
  [self addSubview:leftView];

  leftView.frame = leftViewInitialFrame;
  rightView.frame = rightViewInitialFrame;

  [UIView animateWithDuration:kAnimationTime
      animations:^{
        leftView.frame = leftViewFinalFrame;
        rightView.frame = rightViewFinalFrame;
      }
      completion:^(BOOL finished) {
        [self removeFromSuperview];
      }];
}

@end
