// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later

package space.rcmd.android.sizzle.model

/**
 * Canonical option lists and shape constants for the subtractive (Minimoog-style)
 * synth ([ToolboxType.NES_SYNTH]). Kept in the model layer so the parameter specs,
 * the DSP patch parser, the bespoke editor and the factory presets all agree on the
 * exact string values that serialize into a slot.
 */
object SynthDefs {
    /** Oscillator waveforms. */
    val WAVES = listOf("Tri", "Saw", "Square", "Pulse25", "Pulse12")
    /** LFO waveforms. */
    val LFO_WAVES = listOf("Tri", "Saw", "Square", "Sine", "S&H")
    /** Modulation-matrix sources; index 0 ("Off") disables the slot. */
    val MOD_SRC = listOf("Off", "LFO", "FiltEnv", "AmpEnv", "Vel", "KeyTrk")
    /** Modulation-matrix destinations. */
    val MOD_DST = listOf("Pitch", "Osc2", "Osc3", "Cutoff", "PWM", "Amp")

    const val OSC_COUNT = 3
    const val MOD_SLOTS = 4

    /** Init-patch oscillator waveforms (per oscillator). */
    val DEF_OSC_WAVE = listOf("Saw", "Square", "Tri")
    /** Init-patch oscillator mixer levels (only oscillator 1 audible by default). */
    val DEF_OSC_LEVEL = listOf(0.9f, 0f, 0f)
}
