Files
MindMachine/app/src/main/java/com/mindmachine/mvp/domain/Models.kt
2026-03-21 23:01:02 -05:00

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,
)