// Copyright (c) 2012 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/fancy_ui/bidi_container_view.h"

#include "base/i18n/rtl.h"
#include "base/logging.h"

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

namespace ios {
namespace rtl {
enum AdjustSubviewsForRTLType {
  ADJUST_FRAME_AND_AUTOROTATION_MASK_FOR_ALL_SUBVIEWS,
  ADJUST_FRAME_FOR_UPDATED_SUBVIEWS
};
}  // namespace rtl
}  // namespace ios

@interface BidiContainerView () {
  ios::rtl::AdjustSubviewsForRTLType adjustSubviewsType_;
  NSMutableSet* subviewsToBeAdjustedForRTL_;
}
// Changes the autoresizing mask by mirroring it horizontally so that the RTL
// layout is bind to oposite sites than LRT one.
+ (UIViewAutoresizing)mirrorAutoresizingMask:
    (UIViewAutoresizing)autoresizingMask;
@end

@implementation BidiContainerView

+ (UIViewAutoresizing)mirrorAutoresizingMask:
    (UIViewAutoresizing)autoresizingMask {
  UIViewAutoresizing mirroredAutoresizingMask = autoresizingMask;
  mirroredAutoresizingMask &= ~(UIViewAutoresizingFlexibleRightMargin |
                                UIViewAutoresizingFlexibleLeftMargin);

  if (autoresizingMask & UIViewAutoresizingFlexibleRightMargin)
    mirroredAutoresizingMask |= UIViewAutoresizingFlexibleLeftMargin;
  if (autoresizingMask & UIViewAutoresizingFlexibleLeftMargin)
    mirroredAutoresizingMask |= UIViewAutoresizingFlexibleRightMargin;

  return mirroredAutoresizingMask;
}

- (void)layoutSubviews {
  [super layoutSubviews];
  if (!base::i18n::IsRTL())
    return;

  NSArray* viewsToAdjust;
  BOOL adjustAutoresizingMask;
  switch (adjustSubviewsType_) {
    case ios::rtl::ADJUST_FRAME_AND_AUTOROTATION_MASK_FOR_ALL_SUBVIEWS:
      viewsToAdjust = self.subviews;
      adjustAutoresizingMask = YES;
      adjustSubviewsType_ = ios::rtl::ADJUST_FRAME_FOR_UPDATED_SUBVIEWS;
      break;

    case ios::rtl::ADJUST_FRAME_FOR_UPDATED_SUBVIEWS:
      viewsToAdjust = [subviewsToBeAdjustedForRTL_ allObjects];
      adjustAutoresizingMask = NO;
      break;
  }
  if (![viewsToAdjust count])
    return;

  CGFloat frameWidth = self.frame.size.width;
  for (UIView* subview in viewsToAdjust) {
    CGRect subFrame = subview.frame;
    subFrame.origin.x = frameWidth - subFrame.origin.x - subFrame.size.width;
    subview.frame = subFrame;
    if (adjustAutoresizingMask) {
      UIViewAutoresizing mirroredAutoresizingMask =
          [BidiContainerView mirrorAutoresizingMask:[subview autoresizingMask]];
      [subview setAutoresizingMask:mirroredAutoresizingMask];
    }
  }
  [subviewsToBeAdjustedForRTL_ removeAllObjects];
}

- (void)setSubviewNeedsAdjustmentForRTL:(UIView*)subview {
  DCHECK([self.subviews containsObject:subview]);
  if (!base::i18n::IsRTL())
    return;
  if (!subviewsToBeAdjustedForRTL_)
    subviewsToBeAdjustedForRTL_ = [[NSMutableSet alloc] init];
  [subviewsToBeAdjustedForRTL_ addObject:subview];
}

@end
