2026-03-10 22:50:50 -05:00
|
|
|
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,
|
2026-03-10 23:24:49 -05:00
|
|
|
val flashIntervalMs: Int,
|
2026-03-10 22:50:50 -05:00
|
|
|
val intensityPercent: Int,
|
|
|
|
|
val carrierFrequencyHz: Float,
|
|
|
|
|
val binauralDifferenceHz: Float,
|
|
|
|
|
val cautionNote: String,
|
|
|
|
|
val sortOrder: Int,
|
2026-03-21 22:01:01 -05:00
|
|
|
val isUserProgram: Boolean = false,
|
2026-03-10 22:50:50 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
data class SessionConfig(
|
|
|
|
|
val presetId: String,
|
|
|
|
|
val durationSec: Int,
|
|
|
|
|
val mode: SessionMode,
|
|
|
|
|
val visualPatternType: VisualPattern,
|
2026-03-10 23:24:49 -05:00
|
|
|
val flashIntervalMs: Int,
|
2026-03-10 22:50:50 -05:00
|
|
|
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,
|
2026-03-10 23:24:49 -05:00
|
|
|
VisualPattern.PULSE, 167, 60, 200f, 6f,
|
2026-03-10 22:50:50 -05:00
|
|
|
"Stop if discomfort occurs.", 1
|
|
|
|
|
),
|
|
|
|
|
SessionPreset(
|
|
|
|
|
"focus", "Focus", "Steady flash, conservative alert beat", 15 * 60,
|
2026-03-10 23:24:49 -05:00
|
|
|
VisualPattern.FLASH, 100, 65, 220f, 10f,
|
2026-03-10 22:50:50 -05:00
|
|
|
"Use in a safe seated place only.", 2
|
|
|
|
|
),
|
|
|
|
|
SessionPreset(
|
|
|
|
|
"sleep", "Sleep Prep", "Slow pulse, low intensity", 20 * 60,
|
2026-03-10 23:24:49 -05:00
|
|
|
VisualPattern.PULSE, 333, 45, 180f, 3f,
|
2026-03-10 22:50:50 -05:00
|
|
|
"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,
|
2026-03-10 23:24:49 -05:00
|
|
|
flashIntervalMs = flashIntervalMs,
|
2026-03-10 22:50:50 -05:00
|
|
|
intensityPercent = intensityPercent,
|
|
|
|
|
carrierFrequencyHz = carrierFrequencyHz,
|
|
|
|
|
binauralDifferenceHz = binauralDifferenceHz,
|
|
|
|
|
)
|