using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Concurrent;

namespace HBLConsole.Service
{
    /// <summary>
    /// 延时下降沿触发
    /// </summary>
    public class DelayTTrig
    {

        private volatile static ConcurrentDictionary<string, DelayTTrig> _Instance;
        public static DelayTTrig GetInstance(string name)
        {
            if (_Instance == null) _Instance = new ConcurrentDictionary<string, DelayTTrig>();
            if (!_Instance.ContainsKey(name)) _Instance.TryAdd(name, new DelayTTrig());
            return _Instance[name];
        }
        private DelayTTrig() { }

        /// <summary>
        /// 当前时间
        /// </summary>
        public long ET { get; private set; } = 0;

        private bool flag1;
        private bool Q { get; set; }
        private bool IN1
        {
            set
            {
                Q = !value && flag1;
                flag1 = value;
            }
        }

        private bool flag;
        DateTime startTime = new DateTime();

        /// <summary>
        /// 开始计时（时间单位/秒）
        /// </summary>
        /// <param name="PT">计时时间（单位 秒）</param>
        /// <returns></returns>
        public bool Start(bool IN, int PT)
        {
            if (IN)
            {
                if (!flag)
                {
                    startTime = DateTime.Now;
                    flag = true;
                }
                if (ET < PT) ET = Convert.ToInt64(DateTime.Now.Subtract(startTime).TotalSeconds);
            }
            else
            {
                ET = 0;
                flag = false;
            }
            IN1 = ET >= PT;
            return Q;
        }
    }
}
