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

namespace JLGames.RocketDriver.Samples.ServiceDemo.Service.Material
{
    public class MaterialUpdatedResult
    {
        private bool m_Succ;
        private IUserMaterial m_Old;
        private UserNotifyData m_Notify;

        public bool Succ => m_Succ;

        public IUserMaterial Old => m_Old;

        public UserNotifyData Notify => m_Notify;

        /// <summary>
        /// 是否为新增
        /// </summary>
        public bool IsNew => null == m_Old && m_Notify.Offset > 0;

        /// <summary>
        /// 是否为删除
        /// </summary>
        public bool IsDel => null != m_Old && m_Notify.Num == 0 && m_Notify.Offset < 0;

        /// <summary>
        /// 是否为增加
        /// </summary>
        public bool IsIncrease => m_Notify.Offset > 0;

        /// <summary>
        /// 是否为减少
        /// </summary>
        public bool IsDecrease => m_Notify.Offset < 0;

        public override string ToString()
        {
            return $"Result[Succ={m_Succ},Old={m_Old},Notify={m_Notify}]";
        }

        public MaterialUpdatedResult(bool succ, IUserMaterial old, UserNotifyData notify)
        {
            m_Succ = succ;
            m_Old = old;
            m_Notify = notify;
        }
    }

    public class GameMaterialEvents
    {
        /// <summary>
        /// 新增加用户材料
        /// 数据格式:MaterialUpdatedResult
        /// 0 => n
        /// </summary>
        public const string OnNotifyMaterialNew = "GameMaterialEvents.OnNotifyMaterialNew";

        /// <summary>
        /// 清空用户材料
        /// 数据格式:MaterialUpdatedResult
        /// n => 0
        /// </summary>
        public const string OnNotifyMaterialDel = "GameMaterialEvents.OnNotifyMaterialDel";

        /// <summary>
        /// 用户材料增加
        /// 数据格式:MaterialUpdatedResult
        /// </summary>
        public const string OnNotifyMaterialIncrease = "GameMaterialEvents.OnNotifyMaterialIncrease";

        /// <summary>
        /// 用户材料减少
        /// 数据格式:MaterialUpdatedResult
        /// </summary>
        public const string OnNotifyMaterialDecrease = "GameMaterialEvents.OnNotifyMaterialDecrease";

        /// <summary>
        /// 用户材料更新
        /// 数据格式:MaterialUpdatedResult
        /// </summary>
        public const string OnNotifyMaterialUpdate = "GameMaterialEvents.OnNotifyMaterialUpdate";

        /// <summary>
        /// 批量用户材料更新
        /// 数据格式:MaterialUpdatedResult[]
        /// </summary>
        public const string OnNotifyMultiMaterialUpdate = "GameMaterialEvents.OnNotifyMultiMaterialUpdate";

        /// <summary>
        /// 用户数据更新
        /// 数据格式:IGameUserMaterial
        /// </summary>
        public const string OnNotifyMaterialInstanceUpdate = "GameMaterialEvents.OnNotifyMaterialInstanceUpdate";

        /// <summary>
        /// 批量用户数据更新
        /// 数据格式:IGameUserMaterial[]
        /// </summary>
        public const string OnNotifyMultiMaterialInstanceUpdate = "GameMaterialEvents.OnNotifyMultiMaterialInstanceUpdate";
    }
}