using System;
using System;
using System.Diagnostics;
using System.IO;

class Program{

    public string[] product;
    public double brakPN10 = 0;
    public double brakPN16 = 0;
    public double brakPN20 = 0;
    public double brakPN25 = 0;
    public double PN10 = 0;
    public double PN16 = 0;
    public double PN20 = 0;
    public double PN25 = 0;

    public static void Main()
    {
        TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
            new TextWriterTraceListener($"{Directory.GetCurrentDirectory()}/debug.txt")
            };

        Trace.Listeners.AddRange(listeners);
      
        Console.ReadKey();
        Program obj = new Program();
        obj.Readdatas();
        obj.CheckProduct();
        
    }

   
    public void Readdatas()//метод для ситывания из файла
    {
        string[] lines = File.ReadAllLines(@"\\main\RDP\31П\КарзиновВА\Desktop\data.txt");
        Trace.WriteLine("данные считанны");
        product = new string[lines.Length]; 
        foreach (string s in lines)
        {
            
        }
        for (int i = 0; i < lines.Length; i++)
        {
            product[i] = lines[i];
            
        }



    }
    public void CheckProduct()// метод для вызова других методов через массив для проверки брака, нахождения процента брака и веса каждого изделия
    {
        Program obj = new Program();
        string line= "";
        string[] checking = product[0].Split(';');
        for (int i = 0; i < product.Length; i++)
        {
            checking = product[i].Split(';');
            obj.CheckBrak(checking);//проверка на брак
        }
        Trace.WriteLine("Осуществлена проверка на брак");
        foreach (string s in checking)
        {
            
                line += s + " ";
            
        }
        obj.ProcentBrak();// вывод процента
        Trace.WriteLine("Осуществлена вывод процента");
        for (int i = 0; i < product.Length; i++)
        {
            checking = product[i].Split(';');
          Console.WriteLine( line + "  вес равен" + obj.weights(checking));// вывод dtcf
        }
        Trace.WriteLine("Осуществлена вывод веса");
        Trace.Flush();
    }
    public void CheckBrak(string[] myArray)//првоерка на брак
    {
        double lengts = 0;
        double vnDiametr = 0;
        double tolSten = 0;
        double min = 0;
        double max = 0;
        string line = "";
        //значения для проверки выхода за длину
        int minLengh = 3960;
        int maxLengh = 4040;
        //значения для проверки выхода за внешний диаметр
        
        switch (myArray[0])
        {
            case "PN10":
                PN10++;
                foreach (string s in myArray)
                {
                    line += s + " ";
                }
                lengts = Double.Parse(myArray[1]);
                vnDiametr = Double.Parse(myArray[2]);
                tolSten = Double.Parse(myArray[3]);
                min = (vnDiametr / 100) * 10;
                max = (vnDiametr / 100) * 11;
               //проверка внешнего даметра
               
                    // проверка толщины
                    if (tolSten >= min & tolSten <= max)
                    {
                        // проверка длины
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine(line + " -> соответствует");
                        }
                        else

                        {
                            brakPN10++;
                                Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");

                            

                        }
                    }
                    else

                    {
                        brakPN10++;
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine($" {line}  -> несоответствует  толщина {tolSten}  и внешний диаметр {vnDiametr} не входит в диапазон");

                        }
                        else
                        {
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");

                        }

                    }
                
               
                break;

            case "PN16":
                PN16++;
                foreach (string s in myArray)
                {
                    line += s + " ";
                }
                lengts = Double.Parse(myArray[1]);
                vnDiametr = Double.Parse(myArray[2]);
                tolSten = Double.Parse(myArray[3]);
                min = (vnDiametr / 100) * 13.5;
                max = (vnDiametr / 100) * 14;
               
                    if (tolSten >= min & tolSten <= max)
                    {
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine(line + " -> соответствует");
                        }
                        else

                        {
                            brakPN16++;
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");



                        }
                    }
                    else

                    {
                        brakPN16++;
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine($" {line}  -> несоответствует  толщина {tolSten}  и внешний диаметр {vnDiametr} не входит в диапазон");

                        }
                        else
                        {
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");

                        }

                    }
                
                
                break;
            case "PN20":
                PN20++;
                foreach (string s in myArray)
                {
                    line += s + " ";
                }
                lengts = Double.Parse(myArray[1]);
                vnDiametr = Double.Parse(myArray[2]);
                tolSten = Double.Parse(myArray[3]);
                min = (vnDiametr / 100) * 16.5;
                max = (vnDiametr / 100) * 17;
                
                    if (tolSten >= min & tolSten <= max)
                    {
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine(line + " -> соответствует");
                        }
                        else

                        {
                            brakPN20++;
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");



                        }
                    }
                    else

                    {
                        brakPN20++;
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine($" {line}  -> несоответствует  толщина {tolSten}  и внешний диаметр {vnDiametr} не входит в диапазон");

                        }
                        else
                        {
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");

                        }

                    }
               
                break;
            case "PN25":
                PN25++;
                foreach (string s in myArray)
                {
                    line += s + " ";
                }
                lengts = Double.Parse(myArray[1]);
                vnDiametr = Double.Parse(myArray[2]);
                tolSten = Double.Parse(myArray[3]);
                min = (vnDiametr / 100) * 16.5;
                max = (vnDiametr / 100) * 17;
               
                    if (tolSten >= min & tolSten <= max)
                    {
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine(line + " -> соответствует");
                        }
                        else

                        {
                            brakPN25++;
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");



                        }
                    }
                    else

                    {
                        brakPN25++;
                        if (lengts >= minLengh & lengts <= maxLengh)

                        {
                            Console.WriteLine($" {line}  -> несоответствует  толщина {tolSten}  и внешний диаметр {vnDiametr} не входит в диапазон");

                        }
                        else
                        {
                            Console.WriteLine($" {line}  -> несоответствует длина {lengts}  не входит в диапазон толщина {tolSten}  и внешний диаметр{vnDiametr} не входит в диапазон");

                        }

                    }
              
                break;


        }
    }
    public void ProcentBrak()//подсчет процентов
    {
        double procPN10 = 0;
        double procPN16 = 0;
        double procPN20 = 0;
        double procPN25 = 0;
        //формула для прцоентов
        procPN10 = ((double)((brakPN10 / PN10) * 100));
        Console.WriteLine("Процент брака PN10 составляет" + procPN10);
        procPN16 = ((double)((brakPN16 / PN16) * 100));
        Console.WriteLine("Процент брака PN16 составляет" + procPN16);
        procPN20 = ((double)((brakPN20 / PN20) * 100));
        Console.WriteLine("Процент брака PN20 составляет" + procPN20);
        procPN25 = ((double)((brakPN25 / PN25) * 100));
        Console.WriteLine("Процент брака PN25 составляет" + procPN25);
    }

    public double weights(string[] myArray)//нахождение веса
    {
        double mass = 0;
        double plotNoA = 0.91 ;
        double plotA = 1.24 ;
        double S = Double.Parse(myArray[3]);
        double D = Double.Parse(myArray[2]);
        double L = Double.Parse(myArray[1]);
        if (myArray.Length == 5)
        {
            mass = Math.PI * plotA * S * (D - S) * L;
        }
        else mass = Math.PI * plotNoA * S * (D - S) * L;
        return mass;
    }
}