using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Check.Main.Common
{
    /// 
    /// 封装了所有生产统计数据的模型。
    /// 实现了INotifyPropertyChanged,未来可用于数据绑定。
    /// 
    public class StatisticsData : INotifyPropertyChanged
    {
        private int _goodCount;
        private int _ngCount;
        public int GoodCount
        {
            get => _goodCount;
            private set { _goodCount = value; OnPropertyChanged(nameof(GoodCount)); OnPropertyChanged(nameof(TotalCount)); OnPropertyChanged(nameof(YieldRate)); }
        }
        public int NgCount
        {
            get => _ngCount;
            private set { _ngCount = value; OnPropertyChanged(nameof(NgCount)); OnPropertyChanged(nameof(TotalCount)); OnPropertyChanged(nameof(YieldRate)); }
        }
        public int TotalCount => GoodCount + NgCount;
        public double YieldRate => TotalCount == 0 ? 0 : (double)GoodCount / TotalCount;
        /// 
        /// 根据检测结果更新统计数据。
        /// 
        public void UpdateWithResult(bool isOk)
        {
            if (isOk) GoodCount++;
            else NgCount++;
        }
        /// 
        /// 重置所有统计数据。
        /// 
        public void Reset()
        {
            GoodCount = 0;
            NgCount = 0;
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    /// 
    /// 用于在检测完成事件中传递结果的事件参数。
    /// 
    public class DetectionResultEventArgs : EventArgs
    {
        public bool IsOK { get; }
        public DetectionResultEventArgs(bool isOk)
        {
            IsOK = isOk;
        }
    }
}