"""
群体间交互完整示例
演示如何使用群体间交互功能创建复杂的生态系统
"""

from panda3d.core import Vec3
import random

def create_ecosystem_demo(swarm_manager):
    """
    创建生态系统演示
    包含多个群体和复杂的交互关系
    """
    print("创建生态系统演示...")
    
    # 清理现有群体
    swarm_manager.cleanup()
    swarm_manager.swarms.clear()
    swarm_manager.swarm_id_counter = 0
    
    # 创建生产者群体（植物）
    print("创建生产者群体...")
    producer_swarm = swarm_manager.create_example_swarm(
        swarm_type="昆虫",
        member_count=150,
        position_offset=Vec3(0, 0, 2)
    )
    
    # 设置生产者群体为绿色
    for member in producer_swarm['members']:
        if 'node' in member:
            member['node'].setColor(0, 1, 0, 1)  # 绿色
    
    # 创建初级消费者群体（食草动物）
    print("创建初级消费者群体...")
    primary_consumer_swarm = swarm_manager.create_example_swarm(
        swarm_type="鱼类",
        member_count=60,
        position_offset=Vec3(-10, -10, 8)
    )
    
    # 设置初级消费者群体为蓝色
    for member in primary_consumer_swarm['members']:
        if 'node' in member:
            member['node'].setColor(0, 0, 1, 1)  # 蓝色
    
    # 创建次级消费者群体（食肉动物）
    print("创建次级消费者群体...")
    secondary_consumer_swarm = swarm_manager.create_example_swarm(
        swarm_type="鸟类",
        member_count=20,
        position_offset=Vec3(20, 20, 15)
    )
    
    # 设置次级消费者群体为红色
    for member in secondary_consumer_swarm['members']:
        if 'node' in member:
            member['node'].setColor(1, 0, 0, 1)  # 红色
    
    # 创建分解者群体
    print("创建分解者群体...")
    decomposer_swarm = swarm_manager.create_example_swarm(
        swarm_type="昆虫",
        member_count=80,
        position_offset=Vec3(15, -15, 3)
    )
    
    # 设置分解者群体为棕色
    for member in decomposer_swarm['members']:
        if 'node' in member:
            member['node'].setColor(0.5, 0.3, 0, 1)  # 棕色
    
    # 添加环境元素
    print("添加环境元素...")
    # 添加水源
    swarm_manager.create_obstacle(Vec3(-20, -20, 1), 8.0)  # 湖泊
    # 添加食物源
    swarm_manager.create_obstacle(Vec3(10, 10, 4), 3.0)   # 果树林
    # 添加栖息地
    swarm_manager.create_obstacle(Vec3(-15, 15, 6), 5.0)  # 森林
    
    # 设置交互关系
    print("设置交互关系...")
    # 初级消费者吃生产者（竞争关系）
    swarm_manager.interaction_manager.add_interaction(
        primary_consumer_swarm,
        producer_swarm,
        'competitive',
        1.2
    )
    
    # 次级消费者捕食初级消费者（捕食者-猎物关系）
    swarm_manager.interaction_manager.add_interaction(
        secondary_consumer_swarm,
        primary_consumer_swarm,
        'predator_prey',
        1.5
    )
    
    # 分解者与生产者合作（分解有机物，提供养分）
    swarm_manager.interaction_manager.add_interaction(
        decomposer_swarm,
        producer_swarm,
        'cooperative',
        0.8
    )
    
    # 分解者与初级消费者竞争（争夺有机物资源）
    swarm_manager.interaction_manager.add_interaction(
        decomposer_swarm,
        primary_consumer_swarm,
        'competitive',
        0.6
    )
    
    # 更新配置
    swarm_manager.config.set("interaction_enabled", True)
    swarm_manager.config.set("interaction_weight", 1.0)
    swarm_manager.config.set("cohesion_weight", 0.8)
    swarm_manager.config.set("separation_weight", 1.2)
    swarm_manager.config.set("alignment_weight", 0.6)
    swarm_manager.config.set("max_speed", 6.0)
    swarm_manager.config.set("perception_radius", 12.0)
    
    print("生态系统演示创建完成")
    print(f"共创建了 {len(swarm_manager.swarms)} 个群体")
    print("观察生态系统中不同群体之间的复杂交互行为")
    
def create_battle_demo(swarm_manager):
    """
    创建群体对战演示
    两个敌对群体之间的竞争
    """
    print("创建群体对战演示...")
    
    # 清理现有群体
    swarm_manager.cleanup()
    swarm_manager.swarms.clear()
    swarm_manager.swarm_id_counter = 0
    
    # 创建红方群体
    print("创建红方群体...")
    red_swarm = swarm_manager.create_example_swarm(
        swarm_type="鸟类",
        member_count=50,
        position_offset=Vec3(-25, 0, 15)
    )
    
    # 设置红方群体为红色
    for member in red_swarm['members']:
        if 'node' in member:
            member['node'].setColor(1, 0, 0, 1)  # 红色
    
    # 创建蓝方群体
    print("创建蓝方群体...")
    blue_swarm = swarm_manager.create_example_swarm(
        swarm_type="鱼类",
        member_count=50,
        position_offset=Vec3(25, 0, 10)
    )
    
    # 设置蓝方群体为蓝色
    for member in blue_swarm['members']:
        if 'node' in member:
            member['node'].setColor(0, 0, 1, 1)  # 蓝色
    
    # 在中间添加一个资源点
    resource_position = Vec3(0, 0, 10)
    swarm_manager.create_obstacle(resource_position, 4.0)
    
    # 设置敌对关系
    swarm_manager.interaction_manager.add_interaction(
        red_swarm,
        blue_swarm,
        'competitive',
        1.8
    )
    
    # 更新配置
    swarm_manager.config.set("interaction_enabled", True)
    swarm_manager.config.set("interaction_weight", 1.5)
    swarm_manager.config.set("cohesion_weight", 1.2)
    swarm_manager.config.set("separation_weight", 1.0)
    swarm_manager.config.set("alignment_weight", 0.8)
    swarm_manager.config.set("max_speed", 8.0)
    swarm_manager.config.set("perception_radius", 15.0)
    
    print("群体对战演示创建完成")
    print("观察两个敌对群体如何争夺中心资源")
    
def create_symbiosis_demo(swarm_manager):
    """
    创建共生关系演示
    两个群体相互依赖，共同生存
    """
    print("创建共生关系演示...")
    
    # 清理现有群体
    swarm_manager.cleanup()
    swarm_manager.swarms.clear()
    swarm_manager.swarm_id_counter = 0
    
    # 创建植物群体
    print("创建植物群体...")
    plant_swarm = swarm_manager.create_example_swarm(
        swarm_type="昆虫",
        member_count=100,
        position_offset=Vec3(0, 0, 3)
    )
    
    # 设置植物群体为绿色
    for member in plant_swarm['members']:
        if 'node' in member:
            member['node'].setColor(0, 1, 0, 1)  # 绿色
    
    # 创建传粉者群体
    print("创建传粉者群体...")
    pollinator_swarm = swarm_manager.create_example_swarm(
        swarm_type="鸟类",
        member_count=30,
        position_offset=Vec3(10, 10, 12)
    )
    
    # 设置传粉者群体为黄色
    for member in pollinator_swarm['members']:
        if 'node' in member:
            member['node'].setColor(1, 1, 0, 1)  # 黄色
    
    # 设置共生关系
    swarm_manager.interaction_manager.add_interaction(
        plant_swarm,
        pollinator_swarm,
        'cooperative',
        1.5
    )
    
    # 添加多个花丛
    for i in range(5):
        angle = i * 2 * 3.14159 / 5
        x = 20 * math.cos(angle)
        y = 20 * math.sin(angle)
        swarm_manager.create_obstacle(Vec3(x, y, 5), 3.0)
    
    # 更新配置
    swarm_manager.config.set("interaction_enabled", True)
    swarm_manager.config.set("interaction_weight", 1.2)
    swarm_manager.config.set("cohesion_weight", 1.0)
    swarm_manager.config.set("separation_weight", 1.3)
    swarm_manager.config.set("alignment_weight", 0.7)
    swarm_manager.config.set("max_speed", 5.0)
    swarm_manager.config.set("perception_radius", 10.0)
    swarm_manager.config.set("wander_enabled", True)
    swarm_manager.config.set("wander_weight", 0.8)
    
    print("共生关系演示创建完成")
    print("观察植物和传粉者之间的互利共生关系")
    
def run_interaction_demo(swarm_manager, demo_type="ecosystem"):
    """
    运行群体间交互演示
    
    :param swarm_manager: 群体管理器
    :param demo_type: 演示类型 ("ecosystem", "battle", "symbiosis")
    """
    import math
    
    print("=== 群体间交互演示 ===")
    
    if demo_type == "ecosystem":
        create_ecosystem_demo(swarm_manager)
    elif demo_type == "battle":
        create_battle_demo(swarm_manager)
    elif demo_type == "symbiosis":
        create_symbiosis_demo(swarm_manager)
    else:
        print(f"未知的演示类型: {demo_type}")
        return
        
    # 启用交互功能
    swarm_manager.config.set("interaction_enabled", True)
    
    print(f"\n{demo_type} 演示已启动")
    print("使用控制面板可以调整交互参数")
    print("观察不同群体之间的复杂交互行为")
    
    return demo_type