using FLY.Thick.Blowing.IService.IBulkDBServicePack;
using FLY.Thick.Blowing.Server.Model;
using FObjBase;
using Misc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FLY.Thick.Blowing.IService
{
    /// <summary>
    /// 基于DB 的 bulkdata
    /// </summary>
    public interface IBulkDbService : INotifyPropertyChanged
    {

        /// <summary>
        /// 数据库中总数量,当它变化了,肯定有新数据
        /// </summary>
        int Count { get; }

        /// <summary>
        /// 开始产生数据时间
        /// </summary>
        DateTime StartTime { get; }

        /// <summary>
        /// 最后产生数据时间
        /// </summary>
        DateTime EndTime { get; }

        /// <summary>
        /// 当前生产,已经结束,已经下辊了
        /// </summary>
        bool IsFinished { get; }

        /// <summary>
        /// 临时数据改变
        /// </summary>
        event BulkDBTempFrameChangedEventHander TempFrameChanged;

        /// <summary>
        /// 获取N幅数据
        /// </summary>
        /// <param name="request"></param>
        /// <param name="AsyncDelegate"></param>
        /// <param name="AsyncContext"></param>
        void GetFrame(
            Pack_GetFrameRequest request,
            AsyncCBHandler AsyncDelegate, object AsyncContext);

        /// <summary>
        /// 获取纵向趋势图
        /// </summary>
        /// <param name="request"></param>
        /// <param name="AsyncDelegate"></param>
        /// <param name="AsyncContext"></param>
        void GetTrend(
            Pack_GetTrendRequest request,
            AsyncCBHandler AsyncDelegate, object AsyncContext);


        /// <summary>
        /// 完成
        /// </summary>
        void Finish();
    }


}

namespace FLY.Thick.Blowing.IService.IBulkDBServicePack
{
    public class Pack_GetFrameRequest
    {
        /// <summary>
        /// 第1个数据 序号
        /// </summary>
        public Int64 Index;

        /// <summary>
        /// 从后向前获取N幅数据
        /// </summary>
        public int Count;
    }
    public class Pack_GetFrameReponse
    {
        public Pack_GetFrameRequest Request;
        public List<Lc_ScanData> Values;
    }
    public class Pack_GetTrendRequest
    {
        /// <summary>
        /// 第1个数据 序号
        /// </summary>
        public Int64 Index;

        /// <summary>
        /// 长度
        /// </summary>
        public int Count;
    }
    public class Pack_GetTrendReponse
    {
        public Pack_GetTrendRequest Request;
        public List<TrendValue> Values;
    }
    public class TrendValue
    {
        public DateTime Time { get; set; }
        public double Value { get; set; }
        public double Sigma { get; set; }
    }


    public class BulkDBTempFrameChangedEventArgs : EventArgs
    {
        /// <summary>
        /// 开始位置
        /// </summary>
        public int StartIndex { get; set; }
        /// <summary>
        /// 数据
        /// </summary>
        public double[] D { get; set; }
    }
    public delegate void BulkDBTempFrameChangedEventHander(object sender, BulkDBTempFrameChangedEventArgs e);
}