﻿using System;
using UnityEngine;

namespace JLGames.RocketDriver.Games.RpgMaterial.Common
{
    [Serializable]
    public class MetaValidStamp
    {
        [Tooltip("Valid Start time(ticks)\n有效开始时间戳(ticks)")] [SerializeField]
        protected long m_ValidStart;

        [Tooltip("Valid End time(ticks)\n有效结束时间戳(ticks)")] [SerializeField]
        protected long m_ValidEnd;

        /// <summary>
        /// Valid Start time(ticks)
        /// 有效开始时间(ticks)
        /// </summary>
        public long ValidStart => m_ValidStart;

        /// <summary>
        /// Obsolete Timestamp(ticks)
        /// 过期时间戳(ticks)
        /// </summary>
        public long ValidEnd => m_ValidEnd;

        /// <summary>
        /// Verify if enabled
        /// 验证是否启用
        /// </summary>
        public bool ValidEnabled => m_ValidEnd > m_ValidStart;
        
        /// <summary>
        /// Check if it is before the valid date
        /// 检查是否在有效日期前
        /// </summary>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public bool CheckBeforeValid(long timestamp)
        {
            return timestamp < m_ValidStart;
        }

        /// <summary>
        /// Check if it is within the valid date
        /// 检查是否在有效日期内
        /// </summary>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public bool CheckInValid(long timestamp)
        {
            return timestamp >= m_ValidStart && timestamp < m_ValidEnd;
        }

        /// <summary>
        /// Check if it is after the valid date
        /// 检查是否在有效日期后
        /// </summary>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public bool CheckAfterValid(long timestamp)
        {
            return timestamp >= m_ValidEnd;
        }

        public override string ToString()
        {
            return $"{{ValidStart={m_ValidEnd}, ValidEnd={m_ValidEnd}}}";
        }

        public MetaValidStamp()
        {
        }

        public MetaValidStamp(long validStart, long validEnd)
        {
            m_ValidStart = validStart;
            m_ValidEnd = validEnd;
        }
    }
}