﻿using Game.Cfg.CfgConst;
using JLGames.RocketDriver.Actions.Utils;
using JLGames.RocketDriver.Samples.ServiceDemo.Cfg.CfgConst;
using JLGames.RocketDriver.Samples.ServiceDemo.Cfg.CfgTitle;

namespace JLGames.RocketDriver.Samples.ServiceDemo.Service.Material
{
    public class ResourceService : GameMaterialServiceBase<IUserResource, IGameResource, CfgMaterialResource>,
        IResourceService, IGameUserMaterialGenerator
    {
        public ResourceService() : base(ConstMaterialType.Resource, false)
        {
        }

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

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

        public void Init()
        {
            DebugUtil.Log("Load configuration data according to their needs...");
            InitMaterialData<GameResource>(ConstCfgData.MaterialResource);
            InitUserMaterialData();
            InvokeInited();
        }

        public void InitData()
        {
            InitDataFromOffline();
            DebugUtil.Log("ResourceService.Inited");
            InvokeDataInited();
        }

        private void InitDataFromOffline()
        {
            DebugUtil.Log("Load user data according to their respective needs...");
            var um1 = new UserResource();
            um1.SetType(1);
            um1.SetMId(1001);
            um1.SetNum(666);
            var um2 = new UserResource();
            um2.SetType(1);
            um2.SetMId(1002);
            um2.SetNum(777);
            var iums = new IUserResource[2]
            {
                um1, um2
            };
            m_UserMaterials.ReplaceUserMaterials(iums);
        }
    }
}