// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/policy/model/policy_earl_grey_matchers.h"

#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
#import "ios/chrome/test/earl_grey/chrome_matchers.h"
#import "ios/chrome/test/earl_grey/chrome_test_case.h"
#import "ios/testing/earl_grey/earl_grey_test.h"

namespace policy {

namespace {

void AssertElementInCollectionWithMatcher(id<GREYMatcher> element_matcher,
                                          id<GREYMatcher> assertion_matcher) {
  [[EarlGrey
      selectElementWithMatcher:grey_allOf(element_matcher,
                                          grey_ancestor(grey_kindOfClassName(
                                              @"UICollectionView")),
                                          grey_sufficientlyVisible(), nil)]
      assertWithMatcher:assertion_matcher];
}

}  // namespace

void AssertButtonInCollectionEnabled(int label_id) {
  AssertElementInCollectionWithMatcher(
      chrome_test_util::ButtonWithAccessibilityLabelId(label_id),
      grey_not(grey_accessibilityTrait(UIAccessibilityTraitNotEnabled)));
}

void AssertButtonInCollectionDisabled(int label_id) {
  AssertElementInCollectionWithMatcher(
      chrome_test_util::ButtonWithAccessibilityLabelId(label_id),
      grey_accessibilityTrait(UIAccessibilityTraitNotEnabled));
}

void AssertContextMenuItemEnabled(int label_id) {
  AssertElementInCollectionWithMatcher(
      chrome_test_util::ContextMenuItemWithAccessibilityLabelId(label_id),
      grey_not(grey_accessibilityTrait(UIAccessibilityTraitNotEnabled)));
}

void AssertContextMenuItemDisabled(int label_id) {
  AssertElementInCollectionWithMatcher(
      chrome_test_util::ContextMenuItemWithAccessibilityLabelId(label_id),
      grey_accessibilityTrait(UIAccessibilityTraitNotEnabled));
}

void AssertOverflowMenuElementEnabled(NSString* accessibilityID) {
  // TODO(crbug.com/40210654): grey_userInteractionEnabled doesn't work
  // for SwiftUI views.
  id<GREYMatcher> enabledMatcher =
      grey_not(grey_accessibilityTrait(UIAccessibilityTraitNotEnabled));
  [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(accessibilityID)]
         usingSearchAction:grey_scrollInDirection(kGREYDirectionDown,
                                                  /*amount=*/200)
      onElementWithMatcher:chrome_test_util::ToolsMenuView()]
      assertWithMatcher:enabledMatcher];
}

void AssertOverflowMenuElementDisabled(NSString* accessibilityID) {
  [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(accessibilityID)]
         usingSearchAction:grey_scrollInDirection(kGREYDirectionDown,
                                                  /*amount=*/200)
      onElementWithMatcher:chrome_test_util::ToolsMenuView()]
      assertWithMatcher:grey_accessibilityTrait(
                            UIAccessibilityTraitNotEnabled)];
}

}  // namespace policy
