#region  --------------- Copyright Dresser Wayne Pignone -------------
/*
 * $Log: /Wrk/Support/ForecourtControl/Wrk/NfsControl/NfsTankReading.cs $
 *
 * 2     07-03-19 17:03 roger.månsson
 * Don't publish a class interface of NfsTankReading to COM.
 *
 * 1     07-03-09 15:42 roger.månsson
 *
 * 3     07-02-16 9:59 roger.månsson
 * FxCop changes
 *
 * 2     07-01-09 9:28 roger.månsson
 * Documentation fixes
 *
 * 1     07-01-05 15:12 roger.månsson
 * Created
 */
#endregion
using System;
using System.Runtime.InteropServices;

#if _SINP
using Wayne.ForecourtControl.Nfs;
#endif

namespace Wayne.ForecourtControl.Fusion
{
    /// <summary>
    /// Data structure carrying the information of a physical tank reading.
    /// </summary>
    [ComVisible(true)]
    [ClassInterface( ClassInterfaceType.None)]
    [ComDefaultInterface(typeof(ITankReadingEx))]
    public class FUSIONTankReading : ITankReadingEx
    {
        #region Fields

        int tankId;
        ProbeState state;
        DateTime dateTime;
        decimal fuelLevel;
        decimal fuelVolume;
        decimal normalizedFuelLevel;
        decimal waterLevel;
        decimal waterVolume;
        decimal fuelTemperature;
        UnitOfMeasure fuelLevelUnit;
        UnitOfMeasure waterLevelUnit;
        bool normalizedFuelLevelSupplied;
        private string originalTransactionData;

        #endregion

        #region Construction
        /// <summary>
        /// Constructor.
        /// </summary>
        ///
        internal FUSIONTankReading()
        {

        }

        /// <param name="tankId"></param>
        /// <param name="state"></param>
        /// <param name="dateTime"></param>
        /// <param name="fuelLevel"></param>
        /// <param name="normalizedFuelLevel"></param>
        /// <param name="waterLevel"></param>
        /// <param name="fuelTemperature"></param>
        /// <param name="fuelLevelUnit"></param>
        /// <param name="waterLevelUnit"></param>
        /// <param name="normalizedFuelLevelSupplied"></param>
        /// <param name="originalTransactionData"></param>
        internal FUSIONTankReading(int tankId, ProbeState state, DateTime dateTime, decimal fuelLevel, decimal fuelVolume, decimal normalizedFuelLevel,
                           decimal waterLevel, decimal waterVolume, decimal fuelTemperature, UnitOfMeasure fuelLevelUnit, UnitOfMeasure waterLevelUnit,
                           bool normalizedFuelLevelSupplied, string originalTransactionData)
        {
            this.tankId = tankId;
            this.state = state;
            this.dateTime = dateTime;
            this.fuelLevel = fuelLevel;
            this.fuelVolume = fuelVolume;
            this.normalizedFuelLevel = normalizedFuelLevel;
            this.waterLevel = waterLevel;
            this.waterVolume = waterVolume;
            this.fuelTemperature = fuelTemperature;
            this.fuelLevelUnit = fuelLevelUnit;
            this.waterLevelUnit = waterLevelUnit;
            this.normalizedFuelLevelSupplied = normalizedFuelLevelSupplied;
            this.originalTransactionData = originalTransactionData;
        }
        #endregion

        #region ITankReadingEx Members

        /// <summary>
        /// Tank where the reading was made.
        /// </summary>
        public int TankId
        {
            get { return tankId; }
        }

        /// <summary>
        /// Status of the probe reading.
        /// </summary>
        public ProbeState State
        {
            get { return state; }
        }

        /// <summary>
        /// Date and time when the phsical reading was made.
        /// </summary>
        public DateTime DateTime
        {
            get { return dateTime; }
        }

        /// <summary>
        /// Fuel level, read by the probe.
        /// </summary>
        public decimal FuelLevel
        {
            get { return fuelLevel; }
        }

        /// <summary>
        /// Fuel volume, read by the probe.
        /// </summary>
        public decimal FuelVolume
        {
            get { return fuelVolume; }
        }

        /// <summary>
        /// Normalized fuel volume recalculated to the normalized temperature (15° C).
        /// </summary>
        public decimal NormalizedFuelLevel
        {
            get { return normalizedFuelLevel; }
        }

        /// <summary>
        /// Water level, read by the probe.
        /// </summary>
        public decimal WaterLevel
        {
            get { return waterLevel; }
        }

        /// <summary>
        /// Water volume, read by the probe.
        /// </summary>
        public decimal WaterVolume
        {
            get { return waterVolume; }
        }

        /// <summary>
        /// Fuel temperature, read by the probe.
        /// </summary>
        public decimal FuelTemperature
        {
            get { return fuelTemperature; }
        }

        /// <summary>
        /// Unit of measure used for the fuel level.
        /// </summary>
        public UnitOfMeasure FuelLevelUnit
        {
            get { return fuelLevelUnit; }
        }

        /// <summary>
        /// Unit of measure for the water level.
        /// </summary>
        public UnitOfMeasure WaterLevelUnit
        {
            get { return waterLevelUnit; }
        }

        /// <summary>
        /// Indicates if the normalized fuel volume is supplied.
        /// </summary>
        public bool NormalizedFuelLevelSupplied
        {
            get { return normalizedFuelLevelSupplied; }
        }

        /// <summary>
        /// 
        /// </summary>
        public string OriginalTransactionData
        {
            get { return originalTransactionData; }
        }

        #endregion

    }
}