using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ПроверкаПродукции
{
    public class Decision
    {
        public string[,] vhod; // Входные данные
        public int[] brak; // Брокованные детали
        public double procent; // Процент бракованных деталей
        public void ShowVhodData() // Вывод входных данных
        {
            Console.WriteLine("Входные данные:");
            for (int i = 0; i < vhod.GetLength(0); i++)
            {
                for (int j = 0; j < vhod.GetLength(1); j++)
                {
                    Console.Write(vhod[i,j] + "\t");
                }
                Console.WriteLine();
            }
        }
        public void proverkaBrak() // Проверка на брак
        {
            brak = new int[0];
            for (int i = 0; i < vhod.GetLength(0); i++)
            {
                if ((Convert.ToDouble(4000) - Convert.ToDouble(vhod[i, 1])) > GetDlinProd() || Math.Abs(Math.Round(Convert.ToDouble(vhod[i, 2])) - Convert.ToDouble(vhod[i, 2])) > GetDiametrProd(Math.Round(Convert.ToDouble(vhod[i, 2]))) || ProverkaShirin(vhod[i, 0], Convert.ToDouble(vhod[i, 2])) == true)
                {
                    Array.Resize(ref brak, brak.Length + 1);
                    brak[brak.Length - 1] = i;
                }
            }
        }
        public static double GetDlinProd() // Допуск длины
        {
            double pogr = 4000 / 100 * 1;
            return pogr;
                 
        }
        public static double GetDiametrProd(double a) // Допуск диаметра
        {
            double d = a / 100 * 1;
            return d;
        }
        public static bool ProverkaShirin(string prod, double shirina) // Проверка допуска ширины изделия
        {
            if(prod == "PN10")
            {
                if(Math.Round(Convert.ToDouble(shirina))/100*10 > Math.Round(Convert.ToDouble(shirina) - shirina) && Math.Round(Convert.ToDouble(shirina)) / 100 * 11 < Math.Round(Convert.ToDouble(shirina) - shirina))
                {
                    return true;
                }
            }
            if (prod == "PN16")
            {
                if (Math.Round(Convert.ToDouble(shirina)) / 100 * 13.5 > Math.Round(Convert.ToDouble(shirina) - shirina) && Math.Round(Convert.ToDouble(shirina)) / 100 * 14 < Math.Round(Convert.ToDouble(shirina) - shirina))
                {
                    return true;
                }
            }
            if (prod == "PN20" || prod == "PN2")
            {
                if (Math.Round(Convert.ToDouble(shirina)) / 100 * 16.5 > Math.Round(Convert.ToDouble(shirina) - shirina) && Math.Round(Convert.ToDouble(shirina)) / 100 * 17 < Math.Round(Convert.ToDouble(shirina) - shirina))
                {
                    return true;
                }
            }
            return false;
        }
        public void ShowBrak() // Метод для вывода детели с указанием брака
        {
            Console.WriteLine("Проверенная продукция: ");
            for (int i = 0; i < vhod.GetLength(0); i++)
            {
                for (int j = 0; j < vhod.GetLength(1); j++)
                {
                    Console.Write(vhod[i, j] + "\t");
                }
                if (ProverkaVhodBrak(i) == true)
                {
                    Console.Write(" - Не соответствует" + "\t");
                }
                else
                {
                    Console.Write(" - Cоответствует" + "\t");
                }
                Console.WriteLine();
            }
        }
        public bool ProverkaVhodBrak(int p) // Проверка вхождения детали в список бракованных
        {
            for (int i = 0; i < brak.Length; i++)
            {
                if (brak[i] == p)
                {
                    return true;
                }
            }
            return false;
        }
        public void GetProcentBrak() // Определение процента брака
        {
            procent = Convert.ToDouble(brak.Length) / Convert.ToDouble(vhod.Length) * 100;
            Console.WriteLine("Процент брака состоявляет " + procent + "%");
        }
    }
}
