package com.yaohun.storyline.quest;

import com.yaohun.storyline.Storyline;
import com.yaohun.storyline.core.Quest;
import com.yaohun.storyline.data.PlayerData;
import com.yaohun.storyline.manage.PlayerManager;
import com.yaohun.storyline.manage.QuestManager;
import com.yaohun.storyline.util.QuestType;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicMobDeathEvent;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class MythicMobsListener implements Listener {

    @EventHandler
    public void onMythicMobsDeath(MythicMobDeathEvent e) {
        // 获取击杀者实体
        LivingEntity killer = e.getKiller();

        // 如果击杀者是玩家才处理
        if (killer instanceof Player) {
            // 获取该 MythicMob 的显示名（带颜色代码），并去除颜色代码后存入 displayName
            String displayName = e.getMob().getDisplayName().replaceAll("§[a-zA-Z0-9]", "");

            // 获取该 MythicMob 的内部名（通常用于标识配置中的 mob id）
            String internalName = e.getMobType().getInternalName();

            // 获取玩家名称
            String playerName = killer.getName();

            // 通过你的插件系统获取该玩家的任务数据管理器
            PlayerManager playerManager = Storyline.getPlayerManager();
            PlayerData playerData = playerManager.getPlayerData(playerName);
            if(playerData == null) return;
            // 玩家若已完成所有任务则直接返回
            if(playerData.isAllCompleted()){
                return;
            }

            // 获取玩家当前任务
            Quest quest = QuestManager.getQuest(playerData.getCurrentQuest());
            if(quest == null){return;}
            // 如果是通过 MythicMob "内部名称" 匹配的击杀任务
            if (quest.getQuestType() == QuestType.KILLS_MM_KEY) {
                // 判断该怪物的 internalName 是否包含任务目标名称
                if (internalName.contains(quest.getTargetName())) {
                    // 增加该任务的完成进度
                    playerData.addQuestAmount(quest);
                }

                // 如果是通过 MythicMob "显示名称" 匹配的击杀任务
            } else if (quest.getQuestType() == QuestType.KILLS_MM_NAME) {
                // 判断显示名称是否包含任务目标名称
                if (displayName.contains(quest.getTargetName())) {
                    // 增加该任务的完成进度
                    playerData.addQuestAmount(quest);
                }
            }
        }
    }
}
