package com.example.gameofmoon.data

import kotlinx.coroutines.delay

/**
 * 简化的Gemini AI服务
 * 暂时提供模拟的AI响应，为将来集成真实API做准备
 */
class SimpleGeminiService {
    
    private val apiKey = "AIzaSyAO7glJMBH5BiJhqYBAOD7FTgv4tVi2HLE"
    
    /**
     * 生成故事续写内容
     */
    suspend fun generateStoryContent(
        currentStory: String,
        playerChoice: String,
        gameContext: GameContext
    ): String {
        // 模拟网络延迟
        delay(2000)
        
        // 基于当前循环和阶段生成不同的内容
        return when {
            gameContext.currentLoop <= 3 -> generateEarlyLoopContent(currentStory, playerChoice)
            gameContext.currentLoop <= 8 -> generateMidLoopContent(currentStory, playerChoice)
            else -> generateLateLoopContent(currentStory, playerChoice)
        }
    }
    
    /**
     * 生成选择建议
     */
    suspend fun generateChoiceSuggestion(
        currentStory: String,
        availableChoices: List<String>,
        gameContext: GameContext
    ): String {
        delay(1500)
        
        val suggestions = listOf(
            "🤖 基于当前情况，我建议优先考虑安全选项。",
            "🤖 这个选择可能会揭示重要信息。",
            "🤖 注意：你的健康状况需要关注。",
            "🤖 伊娃的建议可能有隐藏的含义。",
            "🤖 考虑这个选择对循环进程的影响。"
        )
        
        return suggestions.random()
    }
    
    /**
     * 生成情感化的AI回应
     */
    suspend fun generateEmotionalResponse(
        playerAction: String,
        gameContext: GameContext
    ): String {
        delay(1000)
        
        return when {
            gameContext.unlockedSecrets.contains("eva_identity") -> {
                "🤖 伊娃: 艾利克丝，我能感受到你的困惑。我们会一起度过这个难关。"
            }
            gameContext.health < 30 -> {
                "🤖 系统警告: 检测到生命体征不稳定，建议立即寻找医疗资源。"
            }
            gameContext.currentLoop > 10 -> {
                "🤖 我注意到你已经经历了多次循环。你的决策变得更加明智了。"
            }
            else -> {
                "🤖 正在分析当前情况...建议保持冷静并仔细观察环境。"
            }
        }
    }
    
    private fun generateEarlyLoopContent(currentStory: String, playerChoice: String): String {
        val responses = listOf(
            """
            你的选择让情况有了新的转机。空气中的紧张感稍有缓解，但你知道这只是暂时的。
            
            基地的系统发出低沉的嗡嗡声，提醒你时间的紧迫。每一个决定都可能改变接下来发生的事情。
            
            在这个陌生yet熟悉的环境中，你开始注意到一些之前忽略的细节...
            """.trimIndent(),
            
            """
            你的行动引起了连锁反应。设备的指示灯闪烁着不同的模式，仿佛在传达某种信息。
            
            远处传来脚步声，有人正在接近。你的心跳加速，不确定这是好消息还是坏消息。
            
            这种既视感越来越强烈，好像你曾经做过同样的选择...
            """.trimIndent()
        )
        
        return responses.random()
    }
    
    private fun generateMidLoopContent(currentStory: String, playerChoice: String): String {
        val responses = listOf(
            """
            随着循环的深入，你开始理解这个地方的真正本质。每个选择都揭示了更多的真相。
            
            你与其他基地成员的关系变得复杂。信任和怀疑交织在一起，形成了一张难以解开的网。
            
            伊娃的话语中透露出更多的人性，这让你既感到安慰，又感到困惑...
            """.trimIndent(),
            
            """
            时间循环的机制开始变得清晰。你意识到每次重置都不是完全的重复。
            
            细微的变化在积累，就像水滴石穿一样。你的记忆、你的关系、甚至你的敌人都在悄然改变。
            
            现在的问题不再是如何生存，而是如何在保持自我的同时打破这个循环...
            """.trimIndent()
        )
        
        return responses.random()
    }
    
    private fun generateLateLoopContent(currentStory: String, playerChoice: String): String {
        val responses = listOf(
            """
            在经历了如此多的循环后，你已经不再是最初那个困惑的艾利克丝。
            
            你的每个决定都经过深思熟虑，你了解每个人的动机，预见每个选择的后果。
            
            但最大的挑战依然存在：如何在拯救所有人的同时，保持你们之间珍贵的记忆和联系？
            
            时间锚的控制权就在眼前，最终的选择时刻即将到来...
            """.trimIndent(),
            
            """
            循环的终点越来越近。你能感受到现实结构的不稳定，每个选择都可能是最后一次。
            
            与伊娃的联系变得更加深刻，你们已经超越了AI与人类的界限。
            
            现在你必须面对最痛苦的选择：是选择一个不完美但真实的结局，还是继续这个痛苦但保持记忆的循环？
            """.trimIndent()
        )
        
        return responses.random()
    }
}

/**
 * 游戏上下文信息
 */
data class GameContext(
    val currentLoop: Int,
    val currentDay: Int,
    val health: Int,
    val stamina: Int,
    val unlockedSecrets: Set<String>,
    val exploredLocations: Set<String>,
    val currentPhase: String
)
