using LightlessSync.LightlessConfiguration.Models;

namespace LightlessSync.UI.Models;

/// <summary>
/// Common FFXIV <se.#> sound effect IDs for notifications.
/// These correspond to the same sound IDs used in macros (1–16).
/// </summary>
public static class NotificationSounds
{
    // ─────────────────────────────────────────────
    // Base <se.#> IDs (1–16)
    // https://ffxiv.consolegameswiki.com/wiki/Macros#Sound_Effects
    // ─────────────────────────────────────────────
    public const uint Se1 = 1;   // Soft chime
    public const uint Se2 = 2;   // Higher chime
    public const uint Se3 = 3;   // Bell tone
    public const uint Se4 = 4;   // Harp tone
    public const uint Se5 = 5;   // Mechanical click
    public const uint Se6 = 6;   // Drum / percussion
    public const uint Se7 = 7;   // Metallic chime
    public const uint Se8 = 8;   // Wooden tone
    public const uint Se9 = 9;   // Wind / flute tone
    public const uint Se10 = 11; // Magical sparkle (ID 10 is skipped in game)
    public const uint Se11 = 12; // Metallic ring
    public const uint Se12 = 13; // Deep thud
    public const uint Se13 = 14; // "Tell received" ping
    public const uint Se14 = 15; // Success fanfare
    public const uint Se15 = 16; // System warning
    // Note: Se16 doesn't exist - Se15 is the last available sound

    /// <summary>
    /// General notification sound (<se.2>)
    /// </summary>
    public const uint Info = Se2;

    /// <summary>
    /// Warning/alert sound (<se.15>)
    /// </summary>
    public const uint Warning = Se15;

    /// <summary>
    /// Error sound (<se.15> - System warning, used for errors)
    /// </summary>
    public const uint Error = Se15;

    /// <summary>
    /// Success sound (<se.14>)
    /// </summary>
    public const uint Success = Se14;

    /// <summary>
    /// Pair request sound (<se.13>, same as tell notification)
    /// </summary>
    public const uint PairRequest = Se13;

    /// <summary>
    /// Download complete sound (<se.10>, a clean sparkle tone)
    /// </summary>
    public const uint DownloadComplete = Se10;

    /// <summary>
    /// Get default sound for notification type
    /// </summary>
    public static uint GetDefaultSound(NotificationType type) => type switch
    {
        NotificationType.Info => Info,
        NotificationType.Warning => Warning,
        NotificationType.Error => Error,
        _ => Info
    };
}
