using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IOB_UT_NEXT.Config.Base
{
    /// <summary>
    /// Gestione parametri relativi alla gestione del FluxLog
    /// </summary>
    public class FluxLogDto
    {
        #region Public Properties

        /// <summary>
        /// Abilitazione gestione Dossier quotidiani automatici
        /// </summary>
        public bool AutoSnapshotDossier { get; set; } = false;

        /// <summary>
        /// Abilitazione all'operazione di copia dei valori DynData in area MemMap.Write
        /// </summary>
        public bool CopyDyn2MemWrite { get; set; } = false;

        /// <summary>
        /// DeadBand generale segnali
        /// </summary>
        public double DeadBand { get; set; } = 1;

        /// <summary>
        /// Valore di demoltiplica lettura dynData (se presente) o ignora e pone a 1
        /// </summary>
        public int DemFactDynData { get; set; } = 1;

        /// <summary>
        /// Disabilita DynData globalmente range valori
        /// </summary>
        public bool DisDynData { get; set; } = false;

        /// <summary>
        /// Disabilita controllo range valori
        /// </summary>
        public bool DisDynDataRangeCheck { get; set; } = false;

        /// <summary>
        /// Abilitazione generale FluxLog / DynData
        /// </summary>
        public bool EnableDynData { get; set; } = true;

        /// <summary>
        /// Abilitazione al filtraggio dati FluxLog generale
        /// </summary>
        public bool EnableFilt { get; set; } = true;

        /// <summary>
        /// Abilitazione gestione overrides
        /// </summary>
        public bool EnableOverrides { get; set; } = true;

        /// <summary>
        /// Abilitazione gestione slow data (invio periodico anche in caso di mancata modifica, secondo SamplePeriod)
        /// </summary>
        public bool EnableSlowData { get; set; } = true;

        /// <summary>
        /// Forza DynData senza controllo variazione da precedente valore
        /// </summary>
        public bool ForceDynData { get; set; } = false;

        /// <summary>
        /// DeadBand globale x gestione filtraggio valori per sole variazioni sopra soglia
        /// </summary>
        public float GlobalDeadBand { get; set; } = 1;

        /// <summary>
        /// Durata massima in sec di mancata comunicazione/aggiornamento (ad eventi) dopo di cui i dati vengono comunque riletti
        /// </summary>
        public int MaxSecReload { get; set; } = 1800;

        /// <summary>
        /// Sample period generale (x evitare invii troppo frequenti)
        /// </summary>
        public int SamplePeriod { get; set; } = 1800;

        /// <summary>
        /// Indica se inviare nei flux log il record DYNDATA|xxxx con variazioni
        /// </summary>
        public bool SendDynDataRec { get; set; } = false;

        /// <summary>
        /// Indica se inviare all'avvio applicazione tutti i valori
        /// </summary>
        public bool SendOnBoot { get; set; } = false;

        /// <summary>
        /// Valore soglia x registrare eventi FluxLog TrackData
        /// </summary>
        public int TrackDataThreshold { get; set; } = 20;

        /// <summary>
        /// Durata (in secondi) del veto ad invio snapshot (per evitare doppi click e doppio snapshot/dossier)
        /// </summary>
        public int VetoSendSnapshotSec { get; set; } = 5;

        #endregion Public Properties
    }
}