using System;

namespace MainShell.Hardware.Acs
{
    public sealed class AcsInterferometerCompensationAdress
    {
        private const int AxisIndexedArrayLength = 32;

        public const string PA_CorrectionX1Name = "PA_Correction_X1";
        public const string PA_CorrectionY1Name = "PA_Correction_Y1";
        public const string PA_CorrectionX2Name = "PA_Correction_X2";
        public const string PA_CorrectionY2Name = "PA_Correction_Y2";
        public const string PA_StartPosName = "PA_StartPos";
        public const string PA_StepLenName = "PA_Step_len";
        public const string PA_CorrectionOpenName = "PA_CorrectionOpen";

        public const string PA_CorrectionX1Symbol = "PA_Correction_X1";
        public const string PA_CorrectionY1Symbol = "PA_Correction_Y1";
        public const string PA_CorrectionX2Symbol = "PA_Correction_X2";
        public const string PA_CorrectionY2Symbol = "PA_Correction_Y2";
        public const string PA_StartPosSymbol = "PA_StartPos";
        public const string PA_StepLenSymbol = "PA_StepLen";
        public const string PA_CorrectionOpenSymbol = "PA_CorrectionOpen";

        public AcsInterferometerCompensationAdress()
        {
            PA_Correction_X1 = AcsAddressDefinition.CreateDoubleSymbol(PA_CorrectionX1Name, PA_CorrectionX1Symbol, AxisIndexedArrayLength, "Interferometer compensation array for X1 axis.");
            PA_Correction_Y1 = AcsAddressDefinition.CreateDoubleSymbol(PA_CorrectionY1Name, PA_CorrectionY1Symbol, AxisIndexedArrayLength, "Interferometer compensation array for Y1 axis.");
            PA_Correction_X2 = AcsAddressDefinition.CreateDoubleSymbol(PA_CorrectionX2Name, PA_CorrectionX2Symbol, AxisIndexedArrayLength, "Interferometer compensation array for X2 axis.");
            PA_Correction_Y2 = AcsAddressDefinition.CreateDoubleSymbol(PA_CorrectionY2Name, PA_CorrectionY2Symbol, AxisIndexedArrayLength, "Interferometer compensation array for Y2 axis.");
            PA_StartPos = AcsAddressDefinition.CreateDoubleSymbol(PA_StartPosName, PA_StartPosSymbol, AxisIndexedArrayLength, "Compensation start position array, indexed by axis number.");
            PA_Step_len = AcsAddressDefinition.CreateDoubleSymbol(PA_StepLenName, PA_StepLenSymbol, AxisIndexedArrayLength, "Compensation step length array, indexed by axis number.");
            PA_CorrectionOpen = AcsAddressDefinition.CreateBoolSymbol(PA_CorrectionOpenName, PA_CorrectionOpenSymbol, AxisIndexedArrayLength, "Whether interferometer compensation is enabled per axis.");
        }

        public AcsAddressDefinition PA_Correction_X1 { get; }

        public AcsAddressDefinition PA_Correction_Y1 { get; }

        public AcsAddressDefinition PA_Correction_X2 { get; }

        public AcsAddressDefinition PA_Correction_Y2 { get; }

        public AcsAddressDefinition PA_StartPos { get; }

        public AcsAddressDefinition PA_Step_len { get; }

        public AcsAddressDefinition PA_CorrectionOpen { get; }
    }
}
