using System;

namespace MainShell.Hardware.Acs
{
    public sealed class AcsBondingCommunicationAdress
    {
        public const string PA_X1PosArrayName = "PA_X1Pos_Array";
        public const string PA_X2PosArrayName = "PA_X2Pos_Array";
        public const string PA_Y1PosArrayName = "PA_Y1Pos_Array";
        public const string PA_Y2PosArrayName = "PA_Y2Pos_Array";
        public const string PA_RowSumName = "PA_RowSum";
        public const string PA_RowPointCountArrayName = "PA_RowPointCount_Array";
        public const string PA_CZIsBondingArrayName = "PA_CZIsBonding_Array";
        public const string PA_BigChangeRowArrayName = "PA_BigChangeRow_Array";
        public const string AP_FBStartName = "AP_FBStart";
        public const string PA_BonDataSendFinishName = "PA_BonDataSendFinish";
        public const string PA_BonNumberName = "PA_BonNumber";
        public const string PA_BonEndName = "PA_BonEnd";
        public const string PA_PadPitchName = "PA_PadPitch";
        public const string PA_CZoffsetName = "PA_CZoffset";

        public const string PA_X1FBPosSymbol = "PA_X1FBPos";
        public const string PA_X2FBPosSymbol = "PA_X2FBPos";
        public const string PA_Y1FBPosSymbol = "PA_Y1FBPos";
        public const string PA_Y2FBPosSymbol = "PA_Y2FBPos";
        public const string PA_RowSumSymbol = "PA_RowSum";
        public const string PA_RowPointCountSymbol = "PA_RowPointCount";
        public const string PA_CZIsBondingSymbol = "PA_CZIsBonding";
        public const string PA_BigChangeRowSymbol = "PA_BigChangeRow";
        public const string AP_FBStartSymbol = "AP_FBStart";
        public const string PA_BonDataSendFinishSymbol = "PA_BonDataSendFinish";
        public const string PA_BonNumberSymbol = "PA_BonNumber";
        public const string PA_BonEndSymbol = "PA_BonEnd";
        public const string PA_PadPitchSymbol = "PA_PadPitch";
        public const string PA_CZoffsetSymbol = "PA_CZoffset";

        public AcsBondingCommunicationAdress(string addressSuffix)
        {
            if (addressSuffix == null)
            {
                throw new ArgumentNullException(nameof(addressSuffix));
            }

            PA_X1Pos_Array = AcsAddressDefinition.CreateDoubleSymbol(PA_X1PosArrayName, PA_X1FBPosSymbol + addressSuffix, 10000, "A 区 X1 位置数组，长度为 10000。");
            PA_X2Pos_Array = AcsAddressDefinition.CreateDoubleSymbol(PA_X2PosArrayName, PA_X2FBPosSymbol + addressSuffix, 10000, "A 区 X2 位置数组，长度为 10000。");
            PA_Y1Pos_Array = AcsAddressDefinition.CreateDoubleSymbol(PA_Y1PosArrayName, PA_Y1FBPosSymbol + addressSuffix, 10000, "A 区 Y1 位置数组，长度为 10000。");
            PA_Y2Pos_Array = AcsAddressDefinition.CreateDoubleSymbol(PA_Y2PosArrayName, PA_Y2FBPosSymbol + addressSuffix, 10000, "A 区 Y2 位置数组，长度为 10000。");
            PA_RowSum = AcsAddressDefinition.CreateInt32Symbol(PA_RowSumName, PA_RowSumSymbol + addressSuffix, 1, "A 区已下发的固晶行数。");
            PA_RowPointCount_Array = AcsAddressDefinition.CreateInt32Symbol(PA_RowPointCountArrayName, PA_RowPointCountSymbol + addressSuffix, 10000, "A 区每行固晶点数数组。");
            PA_CZIsBonding_Array = AcsAddressDefinition.CreateBoolSymbol(PA_CZIsBondingArrayName, PA_CZIsBondingSymbol + addressSuffix, 10000, "A 区各点是否处于固晶状态。");
            PA_BigChangeRow_Array = AcsAddressDefinition.CreateBoolSymbol(PA_BigChangeRowArrayName, PA_BigChangeRowSymbol + addressSuffix, 10000, "A 区大跨行标记数组。");
            AP_FBStart = AcsAddressDefinition.CreateInt32Symbol(AP_FBStartName, AP_FBStartSymbol + addressSuffix, 1, "A 区固晶启动标志，1 表示启动。");
            PA_BonDataSendFinish = AcsAddressDefinition.CreateInt32Symbol(PA_BonDataSendFinishName, PA_BonDataSendFinishSymbol + addressSuffix, 1, "补固数据发送完成标志。");
            PA_BonNumber = AcsAddressDefinition.CreateInt32Symbol(PA_BonNumberName, PA_BonNumberSymbol + addressSuffix, 1, "各区补固次数。");
            PA_BonEnd = AcsAddressDefinition.CreateInt32Symbol(PA_BonEndName, PA_BonEndSymbol + addressSuffix, 1, "补固结束标志。");
            PA_PadPitch = AcsAddressDefinition.CreateDoubleSymbol(PA_PadPitchName, PA_PadPitchSymbol + addressSuffix, 1, "焊盘间距参数。");
            PA_CZoffset = AcsAddressDefinition.CreateDoubleSymbol(PA_CZoffsetName, PA_CZoffsetSymbol + addressSuffix, 1, "CZ 偏移量。");
        }

        public AcsAddressDefinition PA_X1Pos_Array { get; }

        public AcsAddressDefinition PA_X2Pos_Array { get; }

        public AcsAddressDefinition PA_Y1Pos_Array { get; }

        public AcsAddressDefinition PA_Y2Pos_Array { get; }

        public AcsAddressDefinition PA_RowSum { get; }

        public AcsAddressDefinition PA_RowPointCount_Array { get; }

        public AcsAddressDefinition PA_CZIsBonding_Array { get; }

        public AcsAddressDefinition PA_BigChangeRow_Array { get; }

        public AcsAddressDefinition AP_FBStart { get; }

        public AcsAddressDefinition PA_BonDataSendFinish { get; }

        public AcsAddressDefinition PA_BonNumber { get; }

        public AcsAddressDefinition PA_BonEnd { get; }

        public AcsAddressDefinition PA_PadPitch { get; }

        public AcsAddressDefinition PA_CZoffset { get; }
    }
}
