package solutions.tretter.githugandroid enum class PlayMode(val label: String) { CLI_ONLY("CLI ONLY"), VISUAL("VISUAL"), } data class GitFile( val name: String, val content: String = "", val staged: Boolean = false, val tracked: Boolean = false, val deleted: Boolean = false, ) data class CommitNode( val id: String, val message: String, ) data class RepoState( val initialized: Boolean = false, val files: List = emptyList(), val commits: List = emptyList(), val headBranch: String = "master", val branches: Map = emptyMap(), val currentDir: String = ".", val tags: List = emptyList(), val remotes: Map = emptyMap(), val config: Map = emptyMap(), val stashes: List = emptyList(), val fetchedBranches: Set = emptySet(), val fetchHeadCount: Int = 0, val pushedBranches: Set = emptySet(), val pushedTags: Set = emptySet(), val submodules: Map = emptyMap(), val maintenanceActions: Set = emptySet(), ) data class Level( val id: String, val title: String, val description: String, val hints: List, val commandSuggestions: List, val validator: (RepoState, String) -> Boolean, val setup: () -> RepoState, val nativeSetup: (NativeLevelSetup.() -> Boolean)? = null, val testCases: List = emptyList(), ) data class LevelTestCase( val name: String, val commands: List, ) fun sampleLevels(): List = allGithugLevels()