package com.mindmachine.mvp.domain enum class VisualPattern { FLASH, PULSE } enum class SessionMode { AUDIO_VISUAL, AUDIO_ONLY, VISUAL_ONLY } enum class RuntimeState { IDLE, COUNTDOWN, RUNNING, PAUSED, INTERRUPTED, COMPLETED, STOPPED, ERROR } enum class CountdownPreference(val seconds: Int) { OFF(0), FIVE(5), TEN(10) } data class SessionPreset( val id: String, val name: String, val description: String, val defaultDurationSec: Int, val visualPatternType: VisualPattern, val flashIntervalMs: Int, val intensityPercent: Int, val carrierFrequencyHz: Float, val binauralDifferenceHz: Float, val cautionNote: String, val sortOrder: Int, ) data class SessionConfig( val presetId: String, val durationSec: Int, val mode: SessionMode, val visualPatternType: VisualPattern, val flashIntervalMs: Int, val intensityPercent: Int, val carrierFrequencyHz: Float, val binauralDifferenceHz: Float, ) data class AppSettings( val safetyAcknowledged: Boolean = false, val safetyAcknowledgedVersion: Int = 0, val countdownPreference: CountdownPreference = CountdownPreference.FIVE, val defaultModePreference: SessionMode = SessionMode.AUDIO_VISUAL, val showHolderGuidanceBeforeSession: Boolean = false, val lastPresetId: String? = null, ) object Presets { val builtIn = listOf( SessionPreset( "relax", "Relax", "Gentle pulse, slower beat", 10 * 60, VisualPattern.PULSE, 167, 60, 200f, 6f, "Stop if discomfort occurs.", 1 ), SessionPreset( "focus", "Focus", "Steady flash, conservative alert beat", 15 * 60, VisualPattern.FLASH, 100, 65, 220f, 10f, "Use in a safe seated place only.", 2 ), SessionPreset( "sleep", "Sleep Prep", "Slow pulse, low intensity", 20 * 60, VisualPattern.PULSE, 333, 45, 180f, 3f, "Do not use while doing other activities.", 3 ) ) } fun SessionPreset.toConfig(defaultMode: SessionMode = SessionMode.AUDIO_VISUAL) = SessionConfig( presetId = id, durationSec = defaultDurationSec, mode = defaultMode, visualPatternType = visualPatternType, flashIntervalMs = flashIntervalMs, intensityPercent = intensityPercent, carrierFrequencyHz = carrierFrequencyHz, binauralDifferenceHz = binauralDifferenceHz, )