/*
 * Fooyin
 * Copyright © 2023, Luke Taylor <luket@pm.me>
 *
 * Fooyin is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Fooyin is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Fooyin.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#pragma once

namespace Fooyin::Constants {
constexpr auto LightIconTheme = "light";
constexpr auto DarkIconTheme  = "dark";

namespace Icons {
constexpr auto Fooyin       = "fooyin";
constexpr auto FooyinWindow = "org.fooyin.fooyin";
constexpr auto NoCover      = "nocover";
constexpr auto Play         = "media-playback-start";
constexpr auto Pause        = "media-playback-pause";
constexpr auto Stop         = "media-playback-stop";
constexpr auto Prev         = "media-skip-backward";
constexpr auto Next         = "media-skip-forward";
constexpr auto Repeat       = "media-playlist-repeat";
constexpr auto RepeatTrack  = "media-playlist-repeat-song";
constexpr auto Shuffle      = "media-playlist-shuffle";
constexpr auto RandomPlay   = "media-playlist-random-play";
constexpr auto VolumeHigh   = "audio-volume-high";
constexpr auto VolumeMed    = "audio-volume-medium";
constexpr auto VolumeLow    = "audio-volume-low";
constexpr auto VolumeMute   = "audio-volume-muted";
constexpr auto AudioFile    = "audio-file";
constexpr auto Font         = "preferences-desktop-font";
constexpr auto Add          = "list-add";
constexpr auto Remove       = "list-remove";
constexpr auto Up           = "go-up";
constexpr auto Down         = "go-down";
constexpr auto GoNext       = "go-next";
constexpr auto GoPrevious   = "go-previous";
constexpr auto Close        = "window-close";
constexpr auto WindowPin    = "window-pin";
constexpr auto WindowUnpin  = "window-unpin";
constexpr auto Clear        = "edit-clear";
constexpr auto ReadOnly     = "emblem-readonly";
constexpr auto Search       = "edit-find";
constexpr auto Filter       = "view-filter";
constexpr auto ScriptEditor = "view-scripteditor";
constexpr auto Log          = "view-log";
constexpr auto Bookmarks    = "user-bookmarks";
constexpr auto Users        = "view-process-users";
constexpr auto Favorite     = "favorite-favorited";
constexpr auto FavoriteOff  = "favorite";
constexpr auto Rss          = "rss-symbolic";

constexpr auto ScriptExpression = "script-expression";
constexpr auto ScriptVariable   = "script-variable";
constexpr auto ScriptFunction   = "script-function";
constexpr auto ScriptLiteral    = "script-literal";
constexpr auto ScriptFormatting = "format-text-bold";
constexpr auto Command          = "command";

constexpr auto Quit          = "application-exit";
constexpr auto Settings      = "preferences-system";
constexpr auto RescanLibrary = "view-refresh";
constexpr auto PlaylistPlay  = "media-playlist-play";
constexpr auto Randomize     = "randomize";
constexpr auto LayoutEditing = "applications-graphics";
constexpr auto QuickSetup    = "preferences-desktop";
constexpr auto Options       = "preferences-other";
constexpr auto SidebarRight  = "sidebar-right";
} // namespace Icons

constexpr auto MenuBar = "Fooyin.MenuBar";

namespace Menus {
constexpr auto File           = "Fooyin.Menu.File";
constexpr auto Edit           = "Fooyin.Menu.Edit";
constexpr auto View           = "Fooyin.Menu.View";
constexpr auto Visualisations = "Fooyin.Menu.View.Visualisations";
constexpr auto EditSort       = "Fooyin.Menu.Edit.Sort";
constexpr auto Layout         = "Fooyin.Menu.Layout";
constexpr auto Playback       = "Fooyin.Menu.Playback";
constexpr auto PlaybackRandom = "Fooyin.Menu.Playback.Random";
constexpr auto PlaybackSkipTo = "Fooyin.Menu.Playback.SkipTo";
constexpr auto PlaybackOrder  = "Fooyin.Menu.Playback.Order";
constexpr auto Library        = "Fooyin.Menu.Library";
constexpr auto Database       = "Fooyin.Menu.Database";
constexpr auto SwitchLibrary  = "Fooyin.Menu.Library.Switch";
constexpr auto Help           = "Fooyin.Menu.Help";

namespace Context {
constexpr auto Layout              = "Fooyin.Menu.Layout";
constexpr auto AddWidget           = "Fooyin.Menu.Widget.Add";
constexpr auto TrackSelection      = "Fooyin.Menu.Tracks";
constexpr auto TrackQueue          = "Fooyin.Menu.Queue";
constexpr auto TracksPlaylist      = "Fooyin.Menu.Tracks.Playlist";
constexpr auto Playlist            = "Fooyin.Menu.Playlist";
constexpr auto PlaylistAddTo       = "Fooyin.Menu.Playlist.AddTo";
constexpr auto ReplayGain          = "Fooyin.Menu.ReplayGain";
constexpr auto Artwork             = "Fooyin.Menu.Artwork";
constexpr auto ArtworkAttach       = "Fooyin.Menu.Artwork.Attach";
constexpr auto Tagging             = "Fooyin.Menu.Tagging";
constexpr auto TrackFinalSeparator = "Fooyin.Menu.Track.FinalSeparator";
constexpr auto Utilities           = "Fooyin.Menu.Utilities";
constexpr auto Convert             = "Fooyin.Menu.Convert";
} // namespace Context
} // namespace Menus

namespace Groups {
constexpr auto File     = "Fooyin.Group.File";
constexpr auto Edit     = "Fooyin.Group.Edit";
constexpr auto View     = "Fooyin.Group.View";
constexpr auto Layout   = "Fooyin.Group.View";
constexpr auto Playback = "Fooyin.Group.Playback";
constexpr auto Library  = "Fooyin.Group.Library";
constexpr auto Help     = "Fooyin.Group.Help";

namespace Context {
constexpr auto Layout        = "Fooyin.Group.Layout";
constexpr auto AddWidget     = "Fooyin.Group.Widget.Add";
constexpr auto Playlist      = "Fooyin.Group.Playlist";
constexpr auto PlaylistAddTo = "Fooyin.Group.Playlist.AddTo";
} // namespace Context
} // namespace Groups

namespace Context {
constexpr auto TrackSelection   = "Fooyin.Context.TrackSelection";
constexpr auto Playlist         = "Fooyin.Context.Playlist";
constexpr auto PlaylistSwitcher = "Fooyin.Context.PlaylistSwitcher";
constexpr auto DirBrowser       = "Fooyin.Context.DirBrowser";
constexpr auto Search           = "Fooyin.Context.Search";
} // namespace Context

namespace Actions {
constexpr auto AddFiles                  = "File.AddFiles";
constexpr auto AddFolders                = "File.AddFolders";
constexpr auto AddStreamUrl              = "File.AddStreamUrl";
constexpr auto NewPlaylist               = "File.NewPlaylist";
constexpr auto NewAutoPlaylist           = "File.NewAutoPlaylist";
constexpr auto EditAutoPlaylist          = "File.EditAutoPlaylist";
constexpr auto RemovePlaylist            = "File.RemovePlaylist";
constexpr auto LoadPlaylist              = "File.LoadPlaylist";
constexpr auto SavePlaylist              = "File.SavePlaylist";
constexpr auto SaveAllPlaylists          = "File.SaveAllPlaylists";
constexpr auto ClearPlaylist             = "Playlist.Clear";
constexpr auto LockPlaylist              = "Playlist.Lock";
constexpr auto New                       = "File.New";
constexpr auto Exit                      = "File.Exit";
constexpr auto Settings                  = "Edit.Settings";
constexpr auto SearchPlaylist            = "Edit.SearchPlaylist";
constexpr auto LayoutEditing             = "Layout.LayoutEditing";
constexpr auto LockSplitters             = "Layout.LockSplitters";
constexpr auto QuickSetup                = "View.QuickSetup";
constexpr auto PlaybackQueue             = "View.PlaybackQueue";
constexpr auto PlaylistManager           = "View.PlaylistManager";
constexpr auto ShowNowPlaying            = "View.ShowNowPlaying";
constexpr auto FocusSearchBar            = "View.FocusSearchBar";
constexpr auto QuickSearch               = "Library.QuickSearch";
constexpr auto SearchLibrary             = "Library.SearchLibrary";
constexpr auto Refresh                   = "Library.Refresh";
constexpr auto Rescan                    = "Library.Rescan";
constexpr auto Stop                      = "Playback.Stop";
constexpr auto PlayPause                 = "Playback.PlayPause";
constexpr auto Next                      = "Playback.Next";
constexpr auto Previous                  = "Playback.Previous";
constexpr auto RandomTrack               = "Playback.RandomTrack";
constexpr auto RandomAlbum               = "Playback.RandomAlbum";
constexpr auto PreviousAlbum             = "Playback.PreviousAlbum";
constexpr auto NextAlbum                 = "Playback.NextAlbum";
constexpr auto PlaybackDefault           = "Playback.Order.Default";
constexpr auto RepeatTrack               = "Playback.Order.RepeatTrack";
constexpr auto RepeatAlbum               = "Playback.Order.RepeatAlbum";
constexpr auto RepeatPlaylist            = "Playback.Order.RepeatPlaylist";
constexpr auto ShuffleTracks             = "Playback.Order.ShuffleTracks";
constexpr auto ShuffleAlbums             = "Playback.Order.ShuffleAlbums";
constexpr auto Random                    = "Playback.Order.Random";
constexpr auto CursorFollowsPlayback     = "Playback.CursorFollowsPlayback";
constexpr auto PlaybackFollowsCursor     = "Playback.PlaybackFollowsCursor";
constexpr auto StopAfterCurrent          = "Playback.StopAfterCurrent";
constexpr auto StopAfterCurrentReset     = "Playback.StopAfterCurrent.Reset";
constexpr auto ScriptEditor              = "View.ScriptEditor";
constexpr auto Log                       = "View.Log";
constexpr auto Cut                       = "Edit.Cut";
constexpr auto Copy                      = "Edit.Copy";
constexpr auto Paste                     = "Edit.Paste";
constexpr auto SelectAll                 = "Edit.SelectAll";
constexpr auto Clear                     = "Edit.Clear";
constexpr auto Undo                      = "Edit.Undo";
constexpr auto Redo                      = "Edit.Redo";
constexpr auto Remove                    = "Edit.Remove";
constexpr auto Rename                    = "Edit.Rename";
constexpr auto SortRandomise             = "Edit.Sort.Randomise";
constexpr auto SortReverse               = "Edit.Sort.Reverse";
constexpr auto VolumeUp                  = "Volume.VolumeUp";
constexpr auto VolumeDown                = "Volume.VolumeDown";
constexpr auto Mute                      = "Volume.Mute";
constexpr auto SeekForwardSmall          = "Seek.Forward.Small";
constexpr auto SeekForwardLarge          = "Seek.Forward.Large";
constexpr auto SeekBackwardSmall         = "Seek.Backward.Small";
constexpr auto SeekBackwardLarge         = "Seek.Backward.Large";
constexpr auto AddToCurrent              = "Tracks.AddToCurrent";
constexpr auto AddToActive               = "Tracks.AddToActive";
constexpr auto AddToPlaylist             = "Tracks.AddToPlaylist";
constexpr auto SendToCurrent             = "Tracks.SendToCurrent";
constexpr auto SendToNew                 = "Tracks.SendToNew";
constexpr auto AddToQueue                = "Tracks.AddToQueue";
constexpr auto QueueNext                 = "Tracks.QueueNext";
constexpr auto SendToQueue               = "Tracks.SendToQueue";
constexpr auto RemoveFromQueue           = "Tracks.RemoveFromQueue";
constexpr auto OpenFolder                = "Tracks.OpenFolder";
constexpr auto CopyLocation              = "Tracks.CopyLocation";
constexpr auto CopyDirectoryPath         = "Tracks.CopyDirectoryPath";
constexpr auto SearchArtwork             = "Tracks.SearchArtwork";
constexpr auto SearchArtworkQuick        = "Tracks.SearchArtworkQuick";
constexpr auto ExportArtwork             = "Tracks.ExportArtwork";
constexpr auto RemoveArtwork             = "Tracks.RemoveArtwork";
constexpr auto Convert                   = "Tracks.Convert";
constexpr auto ConvertDefault            = "Tracks.Convert.Default";
constexpr auto ConvertLastUsed           = "Tracks.Convert.LastUsed";
constexpr auto OpenProperties            = "Tracks.OpenProperties";
constexpr auto TogglePropertiesTrackList = "Tracks.Properties.ToggleTrackList";
constexpr auto PropertiesPreviousTrack   = "Tracks.Properties.PreviousTrack";
constexpr auto PropertiesNextTrack       = "Tracks.Properties.NextTrack";
constexpr auto ToggleMenubar             = "View.ToggleMenubar";
} // namespace Actions

namespace Mime {
constexpr auto PlaylistItems = "application/x-fooyin-playlistitems";
constexpr auto Tracks        = "application/x-fooyin-tracks";
constexpr auto TrackIds      = "application/x-fooyin-trackIds";
constexpr auto QueueTracks   = "application/x-fooyin-queuetracks";
} // namespace Mime

namespace Page {
constexpr auto GeneralCore                        = "Fooyin.Page.General.Core";
constexpr auto Playback                           = "Fooyin.Page.Playback";
constexpr auto Fading                             = "Fooyin.Page.Playback.Fading";
constexpr auto Output                             = "Fooyin.Page.Playback.Output";
constexpr auto OutputDevices                      = "Fooyin.Page.Playback.Output.Devices";
constexpr auto Decoding                           = "Fooyin.Page.Playback.Decoding";
constexpr auto ReplayGain                         = "Fooyin.Page.Playback.ReplayGain";
constexpr auto DspManager                         = "Fooyin.Page.Playback.DspManager";
constexpr auto NowPlaying                         = "Fooyin.Page.Playback.NowPlaying";
constexpr auto InterfaceGeneral                   = "Fooyin.Page.Interface.General";
constexpr auto InterfaceLayout                    = "Fooyin.Page.Interface.Layout";
constexpr auto InterfaceTrackDisplay              = "Fooyin.Page.Interface.TrackDisplay";
constexpr auto InterfaceSelectionInfo             = "Fooyin.Page.Interface.SelectionInfo";
constexpr auto InterfaceContextMenuTrack          = "Fooyin.Page.Interface.ContextMenu.Track";
constexpr auto InterfaceContextMenuPlaylistWidget = "Fooyin.Page.Interface.ContextMenu.PlaylistWidget";
constexpr auto InterfaceContextMenuLibraryTree    = "Fooyin.Page.Interface.ContextMenu.LibraryTree";
constexpr auto InterfaceContextMenuDirBrowser     = "Fooyin.Page.Interface.ContextMenu.DirBrowser";
constexpr auto InterfaceContextMenuLayoutEditing  = "Fooyin.Page.Interface.ContextMenu.LayoutEditing";
constexpr auto InterfaceTheme                     = "Fooyin.Page.Interface.Theme";
constexpr auto ArtworkGeneral                     = "Fooyin.Page.Interface.Artwork.General";
constexpr auto ArtworkDownload                    = "Fooyin.Page.Interface.Artwork.Download";
constexpr auto ArtworkSearching                   = "Fooyin.Page.Interface.Artwork.Searching";
constexpr auto ArtworkSources                     = "Fooyin.Page.Interface.Artwork.Sources";
constexpr auto LibraryGeneral                     = "Fooyin.Page.Library.General";
constexpr auto LibraryMetadata                    = "Fooyin.Page.Library.Metadata";
constexpr auto LibraryRatings                     = "Fooyin.Page.Library.Metadata.Ratings";
constexpr auto LibrarySearching                   = "Fooyin.Page.Library.Searching";
constexpr auto LibrarySorting                     = "Fooyin.Page.Library.Sorting";
constexpr auto PlaylistGeneral                    = "Fooyin.Page.Playlist.General";
constexpr auto PlaylistInterface                  = "Fooyin.Page.Playlist.Interface";
constexpr auto PlaylistAppearance                 = "Fooyin.Page.Playlist.Appearance";
constexpr auto PlaylistTabs                       = "Fooyin.Page.Playlist.Tabs";
constexpr auto PlaylistSaving                     = "Fooyin.Page.Playlist.Saving";
constexpr auto PlaylistPresets                    = "Fooyin.Page.Playlist.Presets";
constexpr auto PlaylistColumns                    = "Fooyin.Page.Playlist.Columns";
constexpr auto LibraryTreeGeneral                 = "Fooyin.Page.Widgets.LibraryTree.General";
constexpr auto LibraryTreeGroups                  = "Fooyin.Page.Widgets.LibraryTree.Groups";
constexpr auto StatusWidget                       = "Fooyin.Page.Interface.StatusBar";
constexpr auto PlaybackQueue                      = "Fooyin.Page.Widgets.PlaybackQueue";
constexpr auto Plugins                            = "Fooyin.Page.Plugins";
constexpr auto ShellIntegration                   = "Fooyin.Page.Integrations.System";
constexpr auto Shortcuts                          = "Fooyin.Page.Shortcuts";
constexpr auto DirBrowser                         = "Fooyin.Page.Widgets.DirBrowser";
constexpr auto Network                            = "Fooyin.Page.Network";
constexpr auto Advanced                           = "Fooyin.Page.Advanced";
} // namespace Page
} // namespace Fooyin::Constants
