package com.example.gameofmoon.story

import com.example.gameofmoon.model.*

/**
 * 时间囚笼故事数据
 * 基于Story目录中的大师级剧情设计
 * 包含完整的主线和支线故事节点
 */
object StoryData {
    
    // 获取故事节点
    fun getStoryNode(nodeId: String): SimpleStoryNode? {
        return storyNodes[nodeId]
    }
    
    // 获取所有故事节点
    fun getAllStoryNodes(): Map<String, SimpleStoryNode> {
        return storyNodes
    }
    
    // 获取当前阶段的可用支线
    fun getAvailableSidelines(currentLoop: Int, unlockedSecrets: Set<String>): List<SimpleStoryNode> {
        return storyNodes.values.filter { node ->
            when {
                currentLoop < 3 -> node.id.startsWith("side_") && node.id.contains("basic")
                currentLoop < 6 -> node.id.startsWith("side_") && !node.id.contains("advanced")
                currentLoop < 10 -> !node.id.contains("endgame")
                else -> true
            }
        }
    }
    
    // 故事节点映射
    private val storyNodes = mapOf(
        "first_awakening" to SimpleStoryNode(
            id = "first_awakening",
            title = "第一次觉醒",
            content = """
                你在月球基地的医疗舱中醒来，头部剧痛如同被锤击。
                
                周围一片混乱，设备的警报声此起彼伏，红色的警示灯在黑暗中闪烁。
                你的记忆模糊不清，但有一种奇怪的既视感...
                仿佛这种情况你已经经历过很多次了。
                
                氧气显示器显示还有6小时的供应量。
                你必须立即采取行动。
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "check_oxygen",
                    text = "检查氧气系统",
                    nextNodeId = "oxygen_crisis",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-5", "消耗体力")
                    )
                ),
                SimpleChoice(
                    id = "search_medical",
                    text = "搜索医疗用品",
                    nextNodeId = "medical_supplies",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "10", "发现止痛药")
                    )
                ),
                SimpleChoice(
                    id = "contact_earth",
                    text = "尝试联系地球",
                    nextNodeId = "communication_failure",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-3", "轻微疲劳")
                    )
                )
            )
        ),
        
        "oxygen_crisis" to SimpleStoryNode(
            id = "oxygen_crisis",
            title = "氧气危机",
            content = """
                你检查了氧气系统，发现情况比预想的更糟糕。
                
                主要氧气管线有三处泄漏，备用氧气罐只剩下20%。
                按照目前的消耗速度，你最多还有4小时的生存时间。
                
                突然，你想起了什么...这些损坏的位置，
                你之前似乎见过。一种不祥的预感涌上心头。
                
                "又是这些地方..."你喃喃自语。
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "repair_system",
                    text = "尝试修复氧气系统",
                    nextNodeId = "repair_attempt",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-10", "重体力劳动")
                    )
                ),
                SimpleChoice(
                    id = "explore_base",
                    text = "探索基地寻找备用氧气",
                    nextNodeId = "base_exploration",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-8", "长距离移动"),
                        SimpleEffect(SimpleEffectType.LOCATION_DISCOVER, "storage_bay", "发现储藏室")
                    )
                ),
                SimpleChoice(
                    id = "memory_fragment",
                    text = "仔细回忆这种既视感",
                    nextNodeId = "memory_recall",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "-5", "精神压力"),
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "time_loop_hint", "时间循环线索")
                    )
                )
            )
        ),
        
        "medical_supplies" to SimpleStoryNode(
            id = "medical_supplies",
            title = "医疗补给",
            content = """
                你在医疗柜中找到了一些止痛药和绷带。
                
                服用止痛药后，头痛稍有缓解，思维也清晰了一些。
                但是，当你看到医疗记录时，发现了令人不安的事实...
                
                这里有你的医疗记录，但日期显示是"第27次循环"。
                什么是"循环"？你从来没有听说过这个概念。
                
                在记录的末尾，你看到一行手写的字迹：
                "必须记住EVA的位置...时间锚在那里。"
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "read_records",
                    text = "仔细阅读所有医疗记录",
                    nextNodeId = "medical_records_detail",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "eva_location", "EVA位置线索")
                    )
                ),
                SimpleChoice(
                    id = "ignore_records",
                    text = "忽略记录，专注当前状况",
                    nextNodeId = "oxygen_crisis",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "5", "避免精神负担")
                    )
                ),
                SimpleChoice(
                    id = "search_eva",
                    text = "立即寻找EVA",
                    nextNodeId = "eva_search",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-7", "紧急搜索")
                    )
                )
            )
        ),
        
        "communication_failure" to SimpleStoryNode(
            id = "communication_failure",
            title = "通讯中断",
            content = """
                你尝试联系地球，但通讯系统完全没有反应。
                
                不仅如此，你发现通讯日志中最后一条记录是28小时前，
                内容是："第27次循环开始，时间锚定失效，正在尝试修复..."
                
                这条记录的发送者署名是...你自己的名字。
                但你完全不记得发送过这条信息。
                
                更令人震惊的是，在这条记录之前，还有26条类似的记录，
                每一条都标注着不同的循环次数。
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "check_logs",
                    text = "查看所有通讯日志",
                    nextNodeId = "time_loop_discovery",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "time_loop_truth", "时间循环真相")
                    )
                ),
                SimpleChoice(
                    id = "repair_comm",
                    text = "尝试修复通讯设备",
                    nextNodeId = "repair_attempt",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-7", "技术工作")
                    )
                ),
                SimpleChoice(
                    id = "panic_reaction",
                    text = "这不可能...我在做梦",
                    nextNodeId = "denial_phase",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "-10", "精神冲击")
                    )
                )
            )
        ),
        
        "time_loop_discovery" to SimpleStoryNode(
            id = "time_loop_discovery",
            title = "时间循环的真相",
            content = """
                通讯日志揭示了令人震惊的真相...
                
                你已经经历了27次相同的28小时循环。
                每次你都会在医疗舱中醒来，每次都会面临氧气危机，
                每次最终都会因为各种原因死亡，然后重新开始。
                
                但这一次，似乎有什么不同了。
                你保留了一些记忆片段，能够意识到循环的存在。
                
                在日志的最后，你看到了一条AI系统的留言：
                "主人，第28次循环已开始。时间锚定器需要手动重置。
                 EVA在月球表面的坐标：月海-7, 地标-Alpha。
                 警告：灾难将在28小时后发生。"
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "find_eva",
                    text = "立即寻找EVA区域",
                    nextNodeId = "eva_preparation",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.LOCATION_DISCOVER, "eva_bay", "发现EVA舱"),
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "disaster_warning", "灾难警告")
                    )
                ),
                SimpleChoice(
                    id = "find_ai",
                    text = "寻找AI系统获得更多信息",
                    nextNodeId = "ai_encounter",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "ai_assistant", "AI助手")
                    )
                ),
                SimpleChoice(
                    id = "prepare_survival",
                    text = "准备生存用品",
                    nextNodeId = "survival_preparation",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "15", "医疗用品"),
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "10", "营养补充")
                    )
                )
            )
        ),
        
        "eva_preparation" to SimpleStoryNode(
            id = "eva_preparation",
            title = "EVA准备",
            content = """
                你找到了EVA（舱外活动）装备区域。
                
                这里的装备看起来已经准备就绪，仿佛之前的"你"已经做过准备。
                在EVA头盔内侧，你发现了一张纸条：
                
                "如果你看到这个，说明你已经开始记住了。
                 时间锚在月球表面的古老遗迹中。
                 但要小心，那里有东西在守护着它。
                 记住：不要相信第一印象，真相藏在第三层。"
                
                你的手在颤抖...这是你自己的笔迹。
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "eva_mission",
                    text = "穿上EVA装备，前往月球表面",
                    nextNodeId = "lunar_surface",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "-15", "EVA任务"),
                        SimpleEffect(SimpleEffectType.LOCATION_DISCOVER, "lunar_ruins", "月球遗迹")
                    ),
                    requirements = listOf(
                        SimpleRequirement(SimpleRequirementType.MIN_STAMINA, "20", "需要足够体力")
                    )
                ),
                SimpleChoice(
                    id = "study_equipment",
                    text = "仔细研究EVA装备和资料",
                    nextNodeId = "equipment_analysis",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "eva_knowledge", "EVA技术知识")
                    )
                ),
                SimpleChoice(
                    id = "rest_prepare",
                    text = "先休息恢复体力",
                    nextNodeId = "rest_period",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "20", "充分休息"),
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "10", "体力恢复")
                    )
                )
            )
        ),
        
        "ai_encounter" to SimpleStoryNode(
            id = "ai_encounter",
            title = "AI助手",
            content = """
                你找到了基地的AI核心系统。
                
                "欢迎回来，艾丽卡博士。这是您的第28次尝试。"
                一个温和的女性声音响起。
                
                "我是ARIA，您的个人AI助手。很遗憾，前27次循环都以失败告终。
                 但这次有所不同...您保留了部分记忆。这是突破的希望。"
                
                "时间锚位于月球古遗迹深处。那里的实体会测试您的决心。
                 您必须做出三个关键选择，每个选择都会影响最终结果。
                 
                 记住：牺牲、信任、真相。这三个词是关键。"
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "ask_disaster",
                    text = "询问即将发生的灾难",
                    nextNodeId = "disaster_explanation",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "disaster_truth", "灾难真相")
                    )
                ),
                SimpleChoice(
                    id = "ask_previous_loops",
                    text = "了解前27次循环的经历",
                    nextNodeId = "loop_history",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "loop_memories", "循环记忆")
                    )
                ),
                SimpleChoice(
                    id = "request_ai_help",
                    text = "请求AI协助生成策略",
                    nextNodeId = "ai_strategy",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.SECRET_UNLOCK, "ai_strategy", "AI策略支持")
                    )
                )
            )
        ),
        
        // 添加更多节点...
        "game_over_failure" to SimpleStoryNode(
            id = "game_over_failure",
            title = "循环重置",
            content = """
                一切都消失在白光中...
                
                当你再次睁开眼睛时，你又回到了医疗舱。
                但这次，你记得更多了。
                
                第29次循环开始。
            """.trimIndent(),
            choices = listOf(
                SimpleChoice(
                    id = "restart_with_memory",
                    text = "带着记忆重新开始",
                    nextNodeId = "first_awakening",
                    effects = listOf(
                        SimpleEffect(SimpleEffectType.LOOP_CHANGE, "1", "新循环开始"),
                        SimpleEffect(SimpleEffectType.HEALTH_CHANGE, "100", "完全恢复"),
                        SimpleEffect(SimpleEffectType.STAMINA_CHANGE, "50", "体力恢复")
                    )
                )
            )
        )
    )
}
