using System;
using HarmonyLib;
using ItemStatsSystem;
using ItemStatsSystem.Items;
using UnityEngine;
using System.Reflection;
namespace test
{
    /// 
    /// 注射器收纳包槽位修改补丁
    /// 将注射器收纳包(ID 882)的槽位数量从6个修改为12个
    /// 
    [HarmonyPatch(typeof(Item))]
    [HarmonyPatch("Initialize")]
    public class InjectionBagSlotPatch
    {
        private const int InjectionBagTypeID = 882;
        /// 
        /// Initialize方法的后缀补丁
        /// 在物品初始化后检查是否是注射器收纳包
        /// 槽位默认6个,变为12个
        /// 
        /// Item实例
        [HarmonyPostfix]
        static void Postfix(Item __instance)
        {
            Debug.Log($"[注射器收纳包修改] 被调用");
            // 检查是否是注射器收纳包
            if (__instance == null || __instance.TypeID != InjectionBagTypeID || __instance.Slots == null)
                return;
            // 获取槽位集合
            SlotCollection slots = __instance.Slots;
            
            if (slots.Count == 12)
                return;
            // 获取原始槽位数量
            int originalSlotCount = slots.Count;
            // 添加6个新的槽位
            for (int i = 0; i < 6; i++)
            {
                // 创建新的Slot对象
                Slot newSlot = (Slot)typeof(Slot).GetConstructor(new Type[0])?.Invoke(null);
                // 设置Slot的Key属性
                typeof(Slot).GetField("Key", BindingFlags.Public | BindingFlags.Instance)?.SetValue(newSlot, $"Slot_{originalSlotCount + i}");
                // 添加到槽位列表
                slots.list.Add(newSlot);
                // 初始化Slot
                typeof(Slot).GetMethod("Initialize", BindingFlags.Public | BindingFlags.Instance)?.Invoke(newSlot, new object[] { slots });
            }
            // 重建字典缓存
            typeof(SlotCollection).GetMethod("BuildDictionary", BindingFlags.NonPublic | BindingFlags.Instance)?.Invoke(slots, null);
            Debug.Log($"[注射器收纳包修改] 已将物品ID {__instance.TypeID} 的槽位数量从{originalSlotCount}修改为{slots.Count}");
        }
    }
}