//
// Copyright (c) 2008 Microsoft Corporation. All rights reserved.
//


using System;
using System.Reflection;
using System.Collections.Generic;
using System.Diagnostics;
using System.ComponentModel;
using System.Resources;
using Microsoft.Powershell.Commands.GetCounter.PdhNative;
using System.Globalization;
using System.Diagnostics.CodeAnalysis;


namespace Microsoft.PowerShell.Commands.GetCounter
{
    public class PerformanceCounterSample
    {
        internal PerformanceCounterSample()
        {
        }

        internal PerformanceCounterSample(string path,
                               string instanceName,
                               double cookedValue,
                               UInt64 rawValue,
                               UInt64 secondValue,
                               uint multiCount,
                               PerformanceCounterType counterType,
                               UInt32 defaultScale,
                               UInt64 timeBase,
                               DateTime timeStamp,
                               UInt64 timeStamp100nSec,
                               UInt32 status)
        {
            _path = path;
            _instanceName = instanceName;
            _cookedValue = cookedValue;
            _rawValue = rawValue;
            _secondValue = secondValue;
            _multiCount = multiCount;
            _counterType = counterType;
            _defaultScale = defaultScale;
            _timeBase = timeBase;
            _timeStamp = timeStamp;
            _timeStamp100nSec = timeStamp100nSec;
            _status = status;
        }

        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        private string _path = "";


        public string InstanceName
        {
            get { return _instanceName; }
            set { _instanceName = value; }
        }
        private string _instanceName = "";


        public double CookedValue
        {
            get { return _cookedValue; }
            set { _cookedValue = value; }
        }
        private double _cookedValue = 0;

        public UInt64 RawValue
        {
            get { return _rawValue; }
            set { _rawValue = value; }
        }
        private UInt64 _rawValue = 0;

        public UInt64 SecondValue
        {
            get { return _secondValue; }
            set { _secondValue = value; }
        }
        private UInt64 _secondValue = 0;

        public uint MultipleCount
        {
            get { return _multiCount; }
            set { _multiCount = value; }
        }
        private uint _multiCount = 0;

        public PerformanceCounterType CounterType
        {
            get { return _counterType; }
            set { _counterType = value; }
        }
        private PerformanceCounterType _counterType = 0;

        public DateTime Timestamp
        {
            get { return _timeStamp; }
            set { _timeStamp = value; }
        }
        private DateTime _timeStamp = DateTime.MinValue;


        public UInt64 Timestamp100NSec
        {
            get { return _timeStamp100nSec; }
            set { _timeStamp100nSec = value; }
        }
        private UInt64 _timeStamp100nSec = 0;

        public UInt32 Status
        {
            get { return _status; }
            set { _status = value; }
        }
        private UInt32 _status = 0;

        public UInt32 DefaultScale
        {
            get { return _defaultScale; }
            set { _defaultScale = value; }
        }
        private UInt32 _defaultScale = 0;

        public UInt64 TimeBase
        {
            get { return _timeBase; }
            set { _timeBase = value; }
        }
        private UInt64 _timeBase = 0;
    }

    public class PerformanceCounterSampleSet
    {
        internal PerformanceCounterSampleSet()
        {
            _resourceMgr = Microsoft.PowerShell.Commands.Diagnostics.Common.CommonUtilities.GetResourceManager();
        }

        internal PerformanceCounterSampleSet(DateTime timeStamp,
                                    PerformanceCounterSample[] counterSamples,
                                    bool firstSet) : this()
        {
            _timeStamp = timeStamp;
            _counterSamples = counterSamples;
        }

        public DateTime Timestamp
        {
            get { return _timeStamp; }
            set { _timeStamp = value; }
        }
        private DateTime _timeStamp = DateTime.MinValue;

        [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays",
                    Scope = "member",
                    Target = "Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample.CounterSamples",
                    Justification = "A string[] is required here because that is the type Powershell supports")]
        public PerformanceCounterSample[] CounterSamples
        {
            get { return _counterSamples; }
            set { _counterSamples = value; }
        }
        private PerformanceCounterSample[] _counterSamples = null;

        private ResourceManager _resourceMgr = null;
    }
}
