namespace DLL_library
{
    public class Task_dll
    {
        public int controlSum;
        public int raznSum;
        public string VIS;
        int[] NumEcvielent;
        public int[] valuesAsArray = { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 };
        public int[] weightNum = { 8, 7, 6, 5, 4, 3, 2, 10, -1, 9, 8, 7, 6, 5, 4, 3, 2 };
        char[] ArraySymbol = new char[23];
        
        public Task_dll(string VIS)
        {
            this.VIS = VIS;


        }
        public bool CheckControlSum()
        {
            if (VIS[8] != 'X')
            {
                if (VIS[8] < '0' || VIS[8] > '9')
                {
                    Console.WriteLine("Ошибка в контрольной сумме - не правильный символ");
                    return false;
                }
                else Input_Array();
                return true;
            }
            else Input_Array();
            return true;
        }
        public bool CheckVISAllNotSymbol()
        {
            for (int i = 0; i < VIS.Length; i++)
            {
                if (VIS[i] == 'I' || VIS[i] == 'O' || VIS[i] == 'Q')
                {
                    return false;
                }
            }
            return true;
        }
        public char[] Input_Array()
        {
            int numChar = 65;
            int chag = 0;
            for (int i = 0; i < ArraySymbol.Length + 3; i++)
            {
                if (numChar == 73 || numChar == 79 || numChar == 81)
                {
                    numChar++;
                    continue;
                }
                else
                {
                    ArraySymbol[chag] = (char)numChar;
                    numChar++;
                    chag++;
                }
            }
            if (CheckVISAllNotSymbol()) workWithVIS();
            else Console.WriteLine("Ошибка - в VIS есть неправильный символ");
            return ArraySymbol;
        }

        public int[] workWithVIS()
        {
            NumEcvielent = new int[VIS.Length];
            for (int i = 0; i < VIS.Length; i++)
            {
                if (i == 8)
                {
                    NumEcvielent[i] = -1;
                    continue;
                }
                for (global::System.Int32 j = 0; j < ArraySymbol.Length; j++)
                {
                    if (VIS[i] >= '0' && VIS[i] <= '9')
                    {

                        NumEcvielent[i] = (int)VIS[i] - 48;
                    }
                    else if (VIS[i] == ArraySymbol[j])
                    {
                        NumEcvielent[i] = valuesAsArray[j];
                    }
                }
            }
            CountSum();
            return NumEcvielent;
        }
        public string CountSum()
        {
            string result = "";
            controlSum = 0;
            for (int i = 0; i < NumEcvielent.Length; i++)
            {
                if (i == 8)
                {
                    continue;
                }
                controlSum += NumEcvielent[i] * weightNum[i];
            }
            int crat = controlSum / 11;
            int minCrat = crat * 11;
            raznSum = controlSum - minCrat;
            if (VIS[8] == 'X')
            {
                if (raznSum == 10)
                {
                    result = "Контрольная сумма совпадает";
                    Console.WriteLine(result);
                }
                else result = "Контрольная сумма Не совпадает"; Console.WriteLine(result);
            }
            else if ((int)VIS[8] - 48 == raznSum)
            {
                result = "Контрольная сумма совпадает";
                Console.WriteLine(result);
            }
            else 
            { 
                result = "Контрольная сумма Не совпадает"; Console.WriteLine(result); 
            }
           
            return result;
        }
        
    }
}