﻿using JLGames.RocketDriver.Games.RpgMaterial.Service;
using JLGames.RocketDriver.Games.RpgMaterial.Common;
using JLGames.RocketDriver.Games.RpgMaterial.User;

namespace JLGames.RocketDriver.Samples.ServiceDemo.Service.Material
{
    internal class GameMaterialSetUtils
    {
        public static MaterialUpdatedResult[] UpdateToSet(IUserMaterialSetMod set, UserNotifyData[] values)
        {
            if (null == values || values.Length == 0) return null;
            var rs = new MaterialUpdatedResult[values.Length];
            for (var index = 0; index < values.Length; index++)
            {
                rs[index] = UpdateToSet(set, values[index]);
            }

            return rs;
        }

        public static MaterialUpdatedResult UpdateToSet(IUserMaterialSetMod set, UserNotifyData notify)
        {
            if (0 == notify.Num) // 删除, Id为EKey
            {
                var removed = set.RemoveUserMaterialAs<IUserMaterial>(notify.Id); //Id为EKey
                return new MaterialUpdatedResult(null != removed, removed, notify);
            }

            var old = set.GetUserMaterialMod<IUserMaterialMod>(notify.Id); //Id为EKey
            if (null == old) // 新增
            {
                var generator = ServiceCenter
                    .GetMaterialService<IGameMaterialService>(notify.Type) as IGameUserMaterialGenerator;
                var newData = generator?.GenUserMaterial(notify.Id, notify.Num); //Id为MId
                set.AddUserMaterialAs(newData);
                return new MaterialUpdatedResult(true, null, notify);
            }

            // 更新
            old.SetNum(notify.Num);
            return new MaterialUpdatedResult(true, old, notify);
        }
    }
}