// Code generated by genevents from backend/events/events.go. DO NOT EDIT.

export const Events = {
    // Playback events (backend → frontend push)
    PlaybackStateChanged: "PlaybackStateChanged",
    PlaybackFinished: "PlaybackFinished",
    TrackChanged: "TrackChanged",
    SeekFailed: "SeekFailed",
    VolumeChanged: "VolumeChanged",
    MuteChanged: "MuteChanged",
    PlaybackPositionChanged: "PlaybackPositionChanged",
    PlaybackFailed: "PlaybackFailed",

    // Queue events (backend → frontend push)
    QueueChanged: "QueueChanged",
    QueueIndexChanged: "QueueIndexChanged",
    QueueModeChanged: "QueueModeChanged",
    QueueTracksModified: "QueueTracksModified",

    // Config events
    LibraryConfigChanged: "LibraryConfigChanged",
    ThemeConfigChanged: "ThemeConfigChanged",
    GeneralConfigChanged: "GeneralConfigChanged",
    TrackListConfigChanged: "TrackListConfigChanged",
    FavoritesConfigChanged: "FavoritesConfigChanged",
    ShortcutsConfigChanged: "ShortcutsConfigChanged",

    // Playlist events
    PlaylistCreated: "PlaylistCreated",
    PlaylistDeleted: "PlaylistDeleted",
    PlaylistRenamed: "PlaylistRenamed",
    PlaylistTracksChanged: "PlaylistTracksChanged",
    PlaylistsRestored: "PlaylistsRestored",
    DefaultPlaylistChanged: "DefaultPlaylistChanged",

    // Library events
    LibraryScanStarted: "LibraryScanStarted",
    LibraryScanProgress: "LibraryScanProgress",
    LibraryScanComplete: "LibraryScanComplete",

    // Scan control events
    LibraryScanCancelled: "LibraryScanCancelled",
    LibraryScanPaused: "LibraryScanPaused",
    LibraryScanResumed: "LibraryScanResumed",

    // Scan queue events
    LibraryScanQueued: "LibraryScanQueued",
    LibraryScanQueueDrained: "LibraryScanQueueDrained",

    // Library CRUD events
    LibraryAdded: "LibraryAdded",
    LibraryRenamed: "LibraryRenamed",
    LibraryRemoved: "LibraryRemoved",

    // Tag writing events.
    //
    // TrackMetadataChanged means "tags on disk were rewritten", and the
    // frontend answers it by throwing the whole library cache away and
    // refetching — which is correct, because a retag can change an album
    // name, an artist, a genre, and therefore every derived collection.
    //
    // It must therefore not be reused for anything cheaper.  Finishing a
    // track used to emit it, so every song cost a full refetch: ~37 MB
    // across the IPC per track at 50 000 tracks, and the user's track
    // selection cleared while music played (audit perf.C1/C2).  That is
    // what TrackPlayCountChanged below exists to separate
    TrackMetadataChanged: "TrackMetadataChanged",
    BatchWriteProgress: "BatchWriteProgress",

    // Track removal events.
    //
    // TracksRemovedFromLibrary means "these rows are gone and these paths
    // will not be imported again", and like TrackPlayCountChanged it
    // carries everything a consumer needs to patch rather than invalidate:
    // {filePaths: []string, count: int}.  The library store splices those
    // paths out of its tracks array — which is the expensive collection —
    // and refetches only the album/artist/genre summaries, whose counts
    // really did change
    TracksRemovedFromLibrary: "TracksRemovedFromLibrary",

    // Play statistics events.
    //
    // TrackPlayCountChanged carries everything needed to patch the one
    // track in place, precisely so no consumer has any reason to invalidate
    // a collection: {audioFileId, filePath, playCount, lastPlayed}
    TrackPlayCountChanged: "TrackPlayCountChanged",

    // Autotag apply events — emitted while an async ApplyAsync job is in flight so the review UI can render per-folder progress
    AutotagApplyStarted: "AutotagApplyStarted",
    AutotagApplyProgress: "AutotagApplyProgress",
    AutotagApplyFinished: "AutotagApplyFinished",

    // Autotag prefetch events — emitted by the background worker that scores pending tagging items so sidebar pills populate without the user having to open each folder
    AutotagPrefetchProgress: "AutotagPrefetchProgress",
    AutotagPrefetchFinished: "AutotagPrefetchFinished",

    // Background job events
    JobsChanged: "JobsChanged",

    // Explore / search index events
    IndexStatusChanged: "IndexStatusChanged",
    ArtistDiscographyReady: "ArtistDiscographyReady",
    ArtistSimilarReady: "ArtistSimilarReady",
    AlbumReleasesReady: "AlbumReleasesReady",
    AlbumReleasesFailed: "AlbumReleasesFailed",
    DownloadProvidersChanged: "DownloadProvidersChanged",
    DownloadsChanged: "DownloadsChanged",
    RequestsChanged: "RequestsChanged",
} as const;

export type EventName = (typeof Events)[keyof typeof Events];
