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

#include "ui/accessibility/ax_enum_test_util.h"

#include <unordered_map>

#include "base/notreached.h"
#include "ui/accessibility/ax_enums.mojom-shared.h"

namespace ui {

ax::mojom::IntListAttribute StringToIntListAttribute(
    const std::string& attribute) {
  static const std::unordered_map<std::string, ax::mojom::IntListAttribute>
      attribute_map = {
          {"kNone", ax::mojom::IntListAttribute::kNone},
          {"kIndirectChildIds", ax::mojom::IntListAttribute::kIndirectChildIds},
          {"kActionsIds", ax::mojom::IntListAttribute::kActionsIds},
          {"kControlsIds", ax::mojom::IntListAttribute::kControlsIds},
          {"kDetailsIds", ax::mojom::IntListAttribute::kDetailsIds},
          {"kDescribedbyIds", ax::mojom::IntListAttribute::kDescribedbyIds},
          {"kErrorMessageIds", ax::mojom::IntListAttribute::kErrormessageIds},
          {"kFlowtoIds", ax::mojom::IntListAttribute::kFlowtoIds},
          {"kLabelledbyIds", ax::mojom::IntListAttribute::kLabelledbyIds},
          {"kRadioGroupIds", ax::mojom::IntListAttribute::kRadioGroupIds},
          {"kMarkerTypes", ax::mojom::IntListAttribute::kMarkerTypes},
          {"kMarkerStarts", ax::mojom::IntListAttribute::kMarkerStarts},
          {"kMarkerEnds", ax::mojom::IntListAttribute::kMarkerEnds},
          {"kHighlightTypes", ax::mojom::IntListAttribute::kHighlightTypes},
          {"kCaretBounds", ax::mojom::IntListAttribute::kCaretBounds},
          {"kCharacterOffsets", ax::mojom::IntListAttribute::kCharacterOffsets},
          {"kLineStarts", ax::mojom::IntListAttribute::kLineStarts},
          {"kLineEnds", ax::mojom::IntListAttribute::kLineEnds},
          {"kSentenceStarts", ax::mojom::IntListAttribute::kSentenceStarts},
          {"kSentenceEnds", ax::mojom::IntListAttribute::kSentenceEnds},
          {"kWordStarts", ax::mojom::IntListAttribute::kWordStarts},
          {"kWordEnds", ax::mojom::IntListAttribute::kWordEnds},
          {"kCustomActionIds", ax::mojom::IntListAttribute::kCustomActionIds},
          {"kTextOperationStartOffsets",
           ax::mojom::IntListAttribute::kTextOperationStartOffsets},
          {"kTextOperationEndOffsets",
           ax::mojom::IntListAttribute::kTextOperationEndOffsets},
          {"kTextOperationStartAnchorIds",
           ax::mojom::IntListAttribute::kTextOperationStartAnchorIds},
          {"kTextOperationEndAnchorIds",
           ax::mojom::IntListAttribute::kTextOperationEndAnchorIds},
          {"kTextOperations", ax::mojom::IntListAttribute::kTextOperations},
          {"kAriaNotificationInterruptProperties",
           ax::mojom::IntListAttribute::kAriaNotificationInterruptProperties},
          {"kAriaNotificationPriorityProperties",
           ax::mojom::IntListAttribute::kAriaNotificationPriorityProperties}};

  auto it = attribute_map.find(attribute);
  if (it != attribute_map.end()) {
    return it->second;
  }

  NOTREACHED() << "An invalid IntListAttribute was provided: " << attribute;
}

}  // namespace ui
