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

namespace JLGames.RocketDriver.Games.RpgMaterial.Service
{
    public class MaterialServiceEventData
    {
        /// <summary>
        /// Update status
        /// 更新状态
        /// </summary>
        public enum UpdateStatus
        {
            None,
            New,
            Del,
            Increase,
            Decrease
        }
        
        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>
        /// Whether it is new
        /// 是否为新增
        /// </summary>
        public bool IsNew => null == m_Old && m_Notify.Offset > 0;

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

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

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

        /// <summary>
        /// Update status
        /// 更新状态
        /// </summary>
        public UpdateStatus Status
        {
            get
            {
                if (IsNew) return UpdateStatus.New;
                if (IsDel) return UpdateStatus.Del;
                if (IsIncrease) return UpdateStatus.Increase;
                if (IsDecrease) return UpdateStatus.Decrease;
                return UpdateStatus.None;
            }
        }
        
        public override string ToString()
        {
            return $"EventData[Succ={m_Succ},Old={m_Old},Notify={m_Notify}]";
        }

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