98 lines
3.6 KiB
Kotlin
98 lines
3.6 KiB
Kotlin
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 }
|
|
|
|
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,
|
|
val isUserProgram: Boolean = false,
|
|
)
|
|
|
|
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 countdownSeconds: Int = 5,
|
|
val defaultModePreference: SessionMode = SessionMode.AUDIO_VISUAL,
|
|
val showHolderGuidanceBeforeSession: Boolean = false,
|
|
val showImmersiveProgressBar: Boolean = true,
|
|
val lastPresetId: String? = null,
|
|
)
|
|
|
|
object Presets {
|
|
val builtIn = listOf(
|
|
SessionPreset(
|
|
"deep_release", "Deep Release", "Slow descent into calm with a soft ending", 18 * 60,
|
|
VisualPattern.PULSE, 260, 52, 180f, 4.5f,
|
|
"Stop if discomfort occurs.", 1
|
|
),
|
|
SessionPreset(
|
|
"laser_focus", "Laser Focus", "Progressive ramp to sharp attention and steady drive", 16 * 60,
|
|
VisualPattern.FLASH, 120, 66, 220f, 12f,
|
|
"Use in a safe seated place only.", 2
|
|
),
|
|
SessionPreset(
|
|
"creative_drift", "Creative Drift", "Alternating intensity waves for idea exploration", 22 * 60,
|
|
VisualPattern.PULSE, 190, 58, 205f, 8f,
|
|
"Use only in a safe resting environment.", 3
|
|
),
|
|
SessionPreset(
|
|
"reset_breath", "Reset Breath", "Gentle rhythmic arcs designed for breathing cadence", 12 * 60,
|
|
VisualPattern.PULSE, 300, 46, 170f, 5.5f,
|
|
"Do not use while driving or operating machinery.", 4
|
|
),
|
|
SessionPreset(
|
|
"night_rampdown", "Night Rampdown", "Long taper from busy mind to pre-sleep stillness", 28 * 60,
|
|
VisualPattern.PULSE, 360, 40, 160f, 2.8f,
|
|
"Do not use while doing other activities.", 5
|
|
),
|
|
SessionPreset(
|
|
"power_warmup", "Power Warmup", "Short energizing ladder for pre-work momentum", 9 * 60,
|
|
VisualPattern.FLASH, 95, 68, 245f, 14f,
|
|
"Use in a safe seated place only.", 6
|
|
),
|
|
SessionPreset(
|
|
"body_scan", "Body Scan", "Balanced mid-tempo sweep with a centered finish", 20 * 60,
|
|
VisualPattern.PULSE, 210, 50, 190f, 6.8f,
|
|
"Stop immediately for dizziness or discomfort.", 7
|
|
),
|
|
SessionPreset(
|
|
"storm_to_still", "Storm to Still", "Starts active, then settles into deep quiet", 24 * 60,
|
|
VisualPattern.FLASH, 150, 61, 215f, 9f,
|
|
"Use only in a safe resting environment.", 8
|
|
)
|
|
)
|
|
}
|
|
|
|
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,
|
|
)
|