﻿using JLGames.RocketDriver.Games.RpgMaterial.User;
using JLGames.RocketDriver.Samples.RpgMaterialDemo.Cfg.CfgConst;
using JLGames.RocketDriver.Samples.RpgMaterialDemo.Cfg.CfgTitle;

namespace JLGames.RocketDriver.Samples.RpgMaterialDemo.Service.Material
{
    public sealed class MaterialItemService : GameMaterialServiceBase<IUserItem, IMaterialItem, CfgMaterialItem>,
        IMaterialItemService
    {
        public MaterialItemService() : base(ConstMaterialType.Item, false)
        {
        }

        // IGameUserMaterialGenerator

        public override IUserMaterial GenUserMaterial(int mid, int num = 0)
        {
            var rs = new UserItem();
            rs.SetType(MaterialType);
            rs.SetMId(mid);
            rs.SetNum(num);
            return rs;
        }

        // IClearService, IInitService

        public override void Clear()
        {
            RemoveNotifyListeners();
            m_UserMaterials = null;
            m_Materials = null;
            base.Clear();
        }

        public void Init()
        {
            InitService();
            var set = InitMaterialData<MaterialItem>(ConstCfgData.MaterialItem);
            m_Materials.UpdateSet(set);
            InvokeInited();
        }

        public void InitData()
        {
            AddNotifyListeners();
            InvokeDataInited();
        }
    }
}