// SoundEvent — the cross-platform set of audible event cues. Each maps to a WAV bundled as an
// SPM resource (Sources/VoiceCatCore/Sounds/, copied from assets/sounds/). The same logical set
// is mirrored in the Windows client (clients/windows/.../Notifications/SoundEvent.cs) so feedback
// stays consistent across platforms.

import Foundation

public enum SoundEvent: CaseIterable, Sendable {
    case channelJoin    // another user joined my channel
    case channelLeave   // another user left my channel
    case channelRecv    // channel text message from someone else
    case channelSent    // channel text message I sent
    case pmRecv         // private message received
    case pmSent         // private message I sent
    case login          // connected / authenticated
    case logout         // clean disconnect
    case connectionLost // unexpected disconnect
    case voiceOn        // my microphone stream started
    case voiceOff       // my microphone stream stopped
    case vaStart        // my voice-activity began (off by default)
    case vaStop         // my voice-activity ended (off by default)
    case ptt            // push-to-talk engaged (off by default)

    /// Resource name (without extension) as bundled in Sources/VoiceCatCore/Sounds/.
    var resourceName: String {
        switch self {
        case .channelJoin:    return "channel_join"
        case .channelLeave:   return "channel_leave"
        case .channelRecv:    return "channel_recv"
        case .channelSent:    return "channel_sent"
        case .pmRecv:         return "pm_recv"
        case .pmSent:         return "pm_sent"
        case .login:          return "login"
        case .logout:         return "logout"
        case .connectionLost: return "connection_lost"
        case .voiceOn:        return "voice_on"
        case .voiceOff:       return "voice_off"
        case .vaStart:        return "va_start"
        case .vaStop:         return "va_stop"
        case .ptt:            return "ptt"
        }
    }
}
