using System;
using System.Collections.Generic;
using System.Text;
using Misc;


namespace FLY.Thick.Base.Common
{
    public class ProfileParam 
    {
        public string pname;
        public int target;
        public int alarm;
        public double comp;
        public int shift;
        public int beginNo;
        public int endNo;
        public int dataBeginNo;
        public int dataEndNo;

        #region IPack 成员

        public byte[] ToBytes()
        {
            List<byte> buf = new List<byte>();
            byte[] bs = Misc.Converter.StringToBytes(pname);
            buf.AddRange(BitConverter.GetBytes(bs.Length));
            buf.AddRange(bs);

            buf.AddRange(BitConverter.GetBytes(target));
            buf.AddRange(BitConverter.GetBytes(alarm));

            buf.AddRange(BitConverter.GetBytes(comp));
            buf.AddRange(BitConverter.GetBytes(shift));
            buf.AddRange(BitConverter.GetBytes(beginNo));
            buf.AddRange(BitConverter.GetBytes(endNo));

            buf.AddRange(BitConverter.GetBytes(dataBeginNo));
            buf.AddRange(BitConverter.GetBytes(dataEndNo));
            return buf.ToArray();
        }

        public bool TryParse(byte[] value)
        {
            int cnt = 4 + 4 * 2 + 8 + 4 * 5;
            if (value.Length < cnt)
                return false;
            int idx = 0;
            int len = BitConverter.ToInt32(value, idx);
            idx += 4;
            cnt += len;
            if (value.Length < cnt)
                return false;

            pname = Misc.Converter.BytesToString(value, idx, len);
            idx += len;

            target = BitConverter.ToInt32(value, idx);
            idx += 4;

            alarm = BitConverter.ToInt32(value, idx);
            idx += 4;


            comp = BitConverter.ToDouble(value, idx);
            idx += 8;

            shift = BitConverter.ToInt32(value, idx);
            idx += 4;


            beginNo = BitConverter.ToInt32(value, idx);
            idx += 4;
            endNo = BitConverter.ToInt32(value, idx);
            idx += 4;

            dataBeginNo = BitConverter.ToInt32(value, idx);
            idx += 4;
            dataEndNo = BitConverter.ToInt32(value, idx);
            idx += 4;
            return true;
        }

        #endregion
    }
}