// 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.

#ifndef CHROME_BROWSER_UI_SIDE_PANEL_SIDE_PANEL_ENTRY_ID_H_
#define CHROME_BROWSER_UI_SIDE_PANEL_SIDE_PANEL_ENTRY_ID_H_

#include <optional>
#include <string>
#include <string_view>

#include "base/notreached.h"
#include "chrome/browser/ui/actions/chrome_action_id.h"
#include "ui/actions/action_id.h"

// Once provided the histogram name should not be changed since it
// is persisted to logs.
// LINT.IfChange(SIDE_PANEL_ENTRY_IDS)
#define SIDE_PANEL_ENTRY_IDS(V)                                               \
  /* Global Entries */                                                        \
  V(kReadingList, kActionSidePanelShowReadingList, "ReadingList")             \
  V(kBookmarks, kActionSidePanelShowBookmarks, "Bookmarks")                   \
  V(kHistoryClusters, kActionSidePanelShowHistoryCluster, "HistoryClusters")  \
  V(kHistory, kActionSidePanelShowHistory, "History")                         \
  V(kReadAnything, kActionSidePanelShowReadAnything, "ReadAnything")          \
  V(kFeed, kActionSidePanelShowFeed, "Feed")                                  \
  V(kWebView, std::nullopt, "WebView")                                        \
  V(kContextualTasks, kActionSidePanelShowContextualTasks, "ContextualTasks") \
  /* Contextual Entries */                                                    \
  V(kSideSearch, kActionSidePanelShowSideSearch, "SideSearch")                \
  V(kLens, kActionSidePanelShowLens, "Lens")                                  \
  V(kAssistant, kActionSidePanelShowAssistant, "Assistant")                   \
  V(kAboutThisSite, kActionSidePanelShowAboutThisSite, "AboutThisSite")       \
  V(kCustomizeChrome, kActionSidePanelShowCustomizeChrome, "CustomizeChrome") \
  V(kSearchCompanion, kActionSidePanelShowSearchCompanion, "Companion")       \
  V(kShoppingInsights, kActionSidePanelShowShoppingInsights,                  \
    "ShoppingInsights")                                                       \
  V(kLensOverlayResults, kActionSidePanelShowLensOverlayResults,              \
    "LensOverlayResults")                                                     \
  V(kMerchantTrust, kActionSidePanelShowMerchantTrust, "MerchantTrust")       \
  V(kComments, kActionSidePanelShowComments, "Comments")                      \
  V(kGeic, kActionSidePanelShowGeic, "Geic")                                  \
  V(kGlic, kActionSidePanelShowGlic, "Glic")                                  \
  V(kTabsFromOtherDevices, kActionSidePanelShowTabsFromOtherDevices,          \
    "TabsFromOtherDevices")                                                   \
  V(kSidePanelDev, std::nullopt, "SidePanelDev")                              \
  V(kTestTabScopedEntry, std::nullopt, "TestTabScopedEntry")                  \
  /* Extensions (nothing more should be added below here) */                  \
  V(kExtension, std::nullopt, "Extension")

// LINT.ThenChange(//tools/metrics/histograms/metadata/browser/histograms.xml:SidePanelEntry)

// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ui.side_panel
// GENERATED_JAVA_PREFIX_TO_STRIP: k
#define SIDE_PANEL_ENTRY_ID_ENUM(entry_id, action_id, histogram_name) entry_id,
enum class SidePanelEntryId { SIDE_PANEL_ENTRY_IDS(SIDE_PANEL_ENTRY_ID_ENUM) };
#undef SIDE_PANEL_ENTRY_ID_ENUM

std::string SidePanelEntryIdToString(SidePanelEntryId id);

std::optional<SidePanelEntryId> SidePanelEntryIdFromString(
    std::string_view name);

std::string_view SidePanelEntryIdToHistogramName(SidePanelEntryId id);

std::optional<actions::ActionId> SidePanelEntryIdToActionId(
    SidePanelEntryId id);

#endif  // CHROME_BROWSER_UI_SIDE_PANEL_SIDE_PANEL_ENTRY_ID_H_
