using System;
using System.Configuration;
using System.Data;
using System.Data.Sql;
using System.Web;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Globalization;
using System.Threading;
using System.Net;

namespace NNmarket
{
    class SystemPlikow
    {
        public static string[] PobierzNazwyFirmGPW(string cudir)
        {

            string KatalogStartowy = cudir + @"\\PL\\";
            List<string> PlikiWynik = new List<string>();

            Stack<string> directoryStack = new Stack<string>();
            directoryStack.Push(KatalogStartowy);
            while (directoryStack.Count > 0 && PlikiWynik.Count < 10000)
            {
                string ObecnyKatalog = directoryStack.Pop();
                foreach (string fileName in Directory.GetFiles(ObecnyKatalog, "*.*"))
                {
                    string NazwaBezRozszerzeniaISciezki = Path.GetFileNameWithoutExtension(fileName);
                    PlikiWynik.Add(NazwaBezRozszerzeniaISciezki);//usowanie rozszerzenia i sciezki
                }
                foreach (string directoryName in Directory.GetDirectories(ObecnyKatalog))
                {
                    directoryStack.Push(directoryName);
                }
            }
            return PlikiWynik.ToArray();

        }
        public static string[] PobierzNazwyFirmNyse(string cudir)
        {

            string KatalogStartowy = cudir + @"\\USA\\";
            List<string> PlikiWynik = new List<string>();

            Stack<string> directoryStack = new Stack<string>();
            directoryStack.Push(KatalogStartowy);
            while (directoryStack.Count > 0 && PlikiWynik.Count < 10000)
            {
                string ObecnyKatalog = directoryStack.Pop();
                foreach (string fileName in Directory.GetFiles(ObecnyKatalog, "*.*"))
                {
                    string NazwaBezRozszerzeniaISciezki = Path.GetFileNameWithoutExtension(fileName);
                    PlikiWynik.Add(NazwaBezRozszerzeniaISciezki);//usowanie rozszerzenia i sciezki
                }
                foreach (string directoryName in Directory.GetDirectories(ObecnyKatalog))
                {
                    directoryStack.Push(directoryName);
                }
            }
            return PlikiWynik.ToArray();

        }
        public static string[] PobierzNazwyobceNYSE(string cudir)
        {

            string KatalogStartowy = cudir + @"\\USA\\";
            List<string> PlikiWynik = new List<string>();

            Stack<string> directoryStack = new Stack<string>();
            directoryStack.Push(KatalogStartowy);
            while (directoryStack.Count > 0 && PlikiWynik.Count < 10000)
            {
                string ObecnyKatalog = directoryStack.Pop();
                foreach (string fileName in Directory.GetFiles(ObecnyKatalog, "*.*"))
                {
                    string NazwaBezRozszerzeniaISciezki = Path.GetFileNameWithoutExtension(fileName);
                    PlikiWynik.Add(NazwaBezRozszerzeniaISciezki);//usowanie rozszerzenia i sciezki
                }
                foreach (string directoryName in Directory.GetDirectories(ObecnyKatalog))
                {
                    directoryStack.Push(directoryName);
                }
            }
            return PlikiWynik.ToArray();

        }
        public static string[] PobierzSciezke(string KatalogStartowy)
        {

            List<string> PlikiWynik = new List<string>();
            Stack<string> directoryStack = new Stack<string>();
            directoryStack.Push(KatalogStartowy);

            //ograniczenie wyników do 1000
            while (directoryStack.Count > 0 && PlikiWynik.Count < 10000)
            {
                string ObecnyKatalog = directoryStack.Pop();

                // dodawanie plikow w tym katalogu
                foreach (string fileName in Directory.GetFiles(ObecnyKatalog, "*.*"))
                {
                    PlikiWynik.Add(fileName);
                }
                //dodawanie katalogow /podkatalogow
                // foreach (string directoryName in Directory.GetDirectories(ObecnyKatalog))
                //{
                //    directoryStack.Push(directoryName);
                //}
            }
            return PlikiWynik.ToArray();
        }
        public static string[] PobierzNazwyPlikow(string KatalogStartowy)
        {
            List<string> PlikiWynik = new List<string>();

            Stack<string> directoryStack = new Stack<string>();
            directoryStack.Push(KatalogStartowy);
            while (directoryStack.Count > 0 && PlikiWynik.Count < 10000)
            {
                string ObecnyKatalog = directoryStack.Pop();
                foreach (string fileName in Directory.GetFiles(ObecnyKatalog, "*.*"))
                {
                    string NazwaBezRozszerzeniaISciezki = Path.GetFileNameWithoutExtension(fileName);
                    PlikiWynik.Add(NazwaBezRozszerzeniaISciezki);//usowanie rozszerzenia i sciezki
                }
                foreach (string directoryName in Directory.GetDirectories(ObecnyKatalog))
                {
                    directoryStack.Push(directoryName);
                }
            }
            return PlikiWynik.ToArray();

        }
        public static double[] ZPlikuDoTablicyGPW(string NazwaSpolki, string CoPobieram, string cudir)
        {

            string SciezkadoPliku = cudir + @"\\PL\\" + NazwaSpolki + ".mst";
            List<string> Wynik = new List<string>();
            string szSrcLine;
            //string Zawartosc = "";
            FileStream fsInput = new FileStream(SciezkadoPliku, FileMode.Open,
                FileAccess.Read);
            StreamReader srInput = new StreamReader(fsInput);
            while ((szSrcLine = srInput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + ",";
                string[] MalaTablica = Regex.Split(Zamiana, @",");
                for (int i = 0; i <= 6; i++)
                {
                    Wynik.Add(MalaTablica[i]);
                }

            }
            srInput.Close();
            fsInput.Close();
            string[] wynik2 = Wynik.ToArray();
            List<double> Wyjscie = new List<double>();
            int j2 = 0;
            if (CoPobieram == "Otwarcie") j2 = 2;
            if (CoPobieram == "Zamkniecie") j2 = 5;
            if (CoPobieram == "Max") j2 = 3; ;
            if (CoPobieram == "Min") j2 = 4;
            if (CoPobieram == "Wolumen") j2 = 6;

            for (int j = j2 + 7; j < wynik2.Length; j = j + 7)
            {
                Wyjscie.Add(Convert.ToDouble(wynik2[j]));

            }

            return Wyjscie.ToArray();

        }
        public static string[] ZPlikuDoTablicyGPWdata(string NazwaSpolki, string cudir)
        {

            string SciezkadoPliku = cudir + @"\\PL\\" + NazwaSpolki + ".mst";
            List<string> Wynik = new List<string>();
            string szSrcLine;
            //string Zawartosc = "";
            FileStream fsInput = new FileStream(SciezkadoPliku, FileMode.Open,
                FileAccess.Read);
            StreamReader srInput = new StreamReader(fsInput);
            while ((szSrcLine = srInput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + ",";
                string[] MalaTablica = Regex.Split(Zamiana, @",");
                for (int i = 0; i <= 6; i++)
                {
                    Wynik.Add(MalaTablica[i]);
                }

            }
            srInput.Close();
            fsInput.Close();
            string[] wynik2 = Wynik.ToArray();
            List<string> Wyjscie = new List<string>();




            for (int j = 1 + 7; j < wynik2.Length; j = j + 7)
            {
                Wyjscie.Add(wynik2[j]);

            }

            return Wyjscie.ToArray();

        }
        public static double[] ZPlikuDoTablicyNYSE(string NazwaSpolki, string CoPobieram, string cudir)
        {

            string SciezkadoPliku = cudir + @"\\USA\\" + NazwaSpolki + ".mst";
            List<string> Wynik = new List<string>();
            string szSrcLine;
            //string Zawartosc = "";
            FileStream fsInput = new FileStream(SciezkadoPliku, FileMode.Open,
                FileAccess.Read);
            StreamReader srInput = new StreamReader(fsInput);
            while ((szSrcLine = srInput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + ",";
                string[] MalaTablica = Regex.Split(Zamiana, @",");
                for (int i = 0; i < 6; i++)
                {
                    Wynik.Add(MalaTablica[i]);
                }

            }
            srInput.Close();
            fsInput.Close();
            Wynik.Reverse();
            string[] wynik2 = Wynik.ToArray();
            List<double> Wyjscie = new List<double>();
            int j2 = 0;
            if (CoPobieram == "Otwarcie") j2 = 4;
            if (CoPobieram == "Zamkniecie") j2 = 1;
            if (CoPobieram == "Max") j2 = 3; ;
            if (CoPobieram == "Min") j2 = 2;
            if (CoPobieram == "Wolumen") j2 = 0;

            for (int j = j2; j < wynik2.Length - 6; j = j + 6)
            {


                Wyjscie.Add(Convert.ToDouble(wynik2[j].Trim()));

            }

            return Wyjscie.ToArray();

        }
        public static string[] ZPlikuDoTablicyNYSEdata(string NazwaSpolki, string cudir)
        {

            string SciezkadoPliku = cudir + @"\\USA\\" + NazwaSpolki + ".mst";
            List<string> Wynik = new List<string>();
            string szSrcLine;
            //string Zawartosc = "";
            FileStream fsInput = new FileStream(SciezkadoPliku, FileMode.Open,
                FileAccess.Read);
            StreamReader srInput = new StreamReader(fsInput);
            while ((szSrcLine = srInput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + ",";
                string[] MalaTablica = Regex.Split(Zamiana, @",");
                for (int i = 0; i < 6; i++)
                {
                    Wynik.Add(MalaTablica[i]);
                }

            }
            srInput.Close();
            fsInput.Close();
            Wynik.Reverse();
            string[] wynik2 = Wynik.ToArray();
            List<string> Wyjscie = new List<string>();




            for (int j = 5; j < wynik2.Length - 6; j = j + 6)
            {
                Wyjscie.Add(wynik2[j]);

            }

            return Wyjscie.ToArray();

        }
        public static double[][] SygnalyWejscie(List<double[]> TabliceWejcie)
        {
            double[][] Tablice = TabliceWejcie.ToArray();
            return Tablice;
        }

        public static void wspolczynnkikiCSV(double[][] ListaTablic, StreamWriter srOutput, FileStream fsOutput, string[] TabliceNazwy, int koniecPredykcja, double[] wejscie, double[] data, double[] Zamkniecie)
        {


            string naglowki = "";
            for (int i = 0; i < TabliceNazwy.Length; i++)
            {
                naglowki += TabliceNazwy[i] + ";";
            }
            naglowki += @"Wyjscie";
            // naglowki += @"data;";
            //  naglowki += @"Zamkniecie";
            srOutput.WriteLine(naglowki);
            string zawartosc = "";

            for (int j = 0; j < koniecPredykcja /*ListaTablic[0].Length*/; j++)
            {
                for (int i = 0; i < ListaTablic.Length; i++)
                {
                    zawartosc += ListaTablic[i][j] + ";";


                }

                zawartosc += wejscie[j] + @"";
                // zawartosc += data[j] + @";";
                //  zawartosc += Zamkniecie[j] + @"";
                srOutput.WriteLine(zawartosc);
                zawartosc = "";
            }
            srOutput.Close();
            fsOutput.Close();
        }
        public static void wspolczynnkikiCSVIWyniki(double[][] ListaTablic, StreamWriter srOutput, FileStream fsOutput, string[] TabliceNazwy, int PoczatekWyniki, int KoniecWyniki, double[] predykcja, double[] data, double[] Zamkniecie)
        {


            string naglowki = "";
            for (int i = 0; i < TabliceNazwy.Length; i++)
            {
                naglowki += TabliceNazwy[i] + ";";
            }
            naglowki += @"Wyjscie;";
            naglowki += @"data;";
            naglowki += @"Zamkniecie";
            srOutput.WriteLine(naglowki);
            string zawartosc = "";

            for (int j = PoczatekWyniki; j < KoniecWyniki; j++)
            {
                for (int i = 0; i < ListaTablic.Length; i++)
                {
                    zawartosc += ListaTablic[i][j] + ";";


                }

                zawartosc += predykcja[j] + @";";
                zawartosc += data[j] + @";";
                zawartosc += Zamkniecie[j] + @"";
                srOutput.WriteLine(zawartosc);
                zawartosc = "";
            }
            srOutput.Close();
            fsOutput.Close();
        }
        public static void wspolczynnkikiCSVIWynikiTester( StreamWriter srOutput, FileStream fsOutput, int PoczatekWyniki, int KoniecWyniki, double[] predykcja, double[] Otwarcie, double[] Zamkniecie)
        {  
            string zawartosc = "";

            for (int j = PoczatekWyniki; j < KoniecWyniki; j++)
            {

                zawartosc += Zamkniecie[j] + @";";
                zawartosc += Otwarcie[j] + @";";
                zawartosc += predykcja[j] + @"";
                srOutput.WriteLine(zawartosc);
                zawartosc = "";
            }
            srOutput.Close();
            fsOutput.Close();
        }
        public static void ZapiszProfil(double[] Kupno, double[] Sprzedaz, StreamWriter srOutput, FileStream fsOutput)
        {

            
                string kupno = "";
                for (int i = 0; i < Kupno.Length - 1; i++)
                {
                    kupno += Kupno[i] + ";";
                }
                kupno += Kupno[Kupno.Length - 1] + @"";
                srOutput.WriteLine(kupno);

                string sprzedaz = "";
                for (int j = 0; j < Sprzedaz.Length - 1; j++)
                {
                    sprzedaz += Sprzedaz[j] + ";";
                }
                sprzedaz += Sprzedaz[Sprzedaz.Length - 1] + @"";
                srOutput.WriteLine(sprzedaz);
                srOutput.Close();
                fsOutput.Close();
           
        }
        public static List<double> WczytajProfilKup(StreamReader srImput, FileStream fsOutput)
        {
            List<double> KupnoKlik = new List<double>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + @"";
                string[] MalaTablica = Regex.Split(Zamiana, @";");
                if (i == 0)
                {
                    for (int j = 0; j < MalaTablica.Length - 1; j++)
                    {
                        KupnoKlik.Add(Convert.ToDouble(MalaTablica[j]));
                    }
                }

                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return KupnoKlik;



        }
        public static List<double> WczytajProfilSprzedaj(StreamReader srImput, FileStream fsOutput)
        {
            List<double> SprzedazKlik = new List<double>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + @"";
                string[] MalaTablica = Regex.Split(Zamiana, @";");
                if (i == 1)
                {
                    for (int j = 0; j < MalaTablica.Length - 1; j++)
                    {
                        SprzedazKlik.Add(Convert.ToDouble(MalaTablica[j]));
                    }
                }

                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return SprzedazKlik;

        }
        
        public static void ZapiszSiecCSV(int IleWarstw, int Neurony0, int Neurony1, int Neurony2, int Neurony3, StreamWriter srOutput, FileStream fsOutput, string[] TabliceNazwy, List<double[]> Warstwa1, List<double[]> Warstwa2, List<double[]> Warstwa3)
        {


            string struktura = "" + IleWarstw.ToString() + ";" + Neurony0.ToString() + ";" + Neurony1.ToString() + ";" + Neurony2.ToString() + ";" + Neurony3.ToString() + "";
            srOutput.WriteLine(struktura);
            string zawartosc = "";

            string wejscia = "";
            for (int i = 0; i < TabliceNazwy.Length; i++)
            {
                if (i == TabliceNazwy.Length - 1)
                {
                    wejscia += TabliceNazwy[i] + "";
                }
                else
                {
                    wejscia += TabliceNazwy[i] + ";";
                }
            }
            srOutput.WriteLine(wejscia);

            double[][] Warstwa1d = Warstwa1.ToArray();
            double[][] Warstwa2d = Warstwa2.ToArray();
            double[][] Warstwa3d = Warstwa3.ToArray();

            for (int i = 0; i < Warstwa1d.Length; i++)
            {
                string wagi = "";
                for (int j = 0; j < Warstwa1d[i].Length; j++)
                {
                    if (j == Warstwa1d[i].Length - 1)
                    {
                        wagi += "" + Warstwa1d[i][j] + "";
                    }
                    else
                    {
                        wagi += "" + Warstwa1d[i][j] + ";";
                    }
                }
                srOutput.WriteLine(wagi);

            }
            //2
            for (int i = 0; i < Warstwa2d.Length; i++)
            {
                string wagi = "";
                for (int j = 0; j < Warstwa2d[i].Length; j++)
                {
                    if (j == Warstwa2d[i].Length - 1)
                    {
                        wagi += "" + Warstwa2d[i][j] + "";
                    }
                    else
                    {
                        wagi += "" + Warstwa2d[i][j] + ";";
                    }
                }
                srOutput.WriteLine(wagi);

            }
            // 3
            for (int i = 0; i < Warstwa3d.Length; i++)
            {
                string wagi = "";
                for (int j = 0; j < Warstwa3d[i].Length; j++)
                {
                    if (j == Warstwa3d[i].Length - 1)
                    {
                        wagi += "" + Warstwa3d[i][j] + "";
                    }
                    else
                    {
                        wagi += "" + Warstwa3d[i][j] + ";";
                    }
                }
                srOutput.WriteLine(wagi);

            }



            srOutput.Close();
            fsOutput.Close();
        }
        public static List<int> WczytajSiecParametry(StreamReader srImput, FileStream fsOutput)
        {
            List<int> parametry = new List<int>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + @"";
                string[] MalaTablica = Regex.Split(Zamiana, @";");
                if (i == 0)
                {
                    for (int j = 0; j < MalaTablica.Length; j++)
                    {
                        parametry.Add(Convert.ToInt32(MalaTablica[j]));
                    }
                }




                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return parametry;

        }
        public static List<string> WczytajSiecNazwyWejsc(StreamReader srImput, FileStream fsOutput)
        {
            List<string> parametry = new List<string>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy
                string Zamiana = szSrcLine + @"";
                string[] MalaTablica = Regex.Split(Zamiana, @";");
                if (i == 1)
                {
                    for (int j = 0; j < MalaTablica.Length; j++)
                    {
                        parametry.Add(MalaTablica[j]);
                    }
                }




                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return parametry;

        }
        public static List<double[]> WczytajSiecParametry1Warstwa(StreamReader srImput, FileStream fsOutput, int IleNeuronów)
        {
            List<double[]> parametry = new List<double[]>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy

                if (i > 1 && i <= IleNeuronów + 2)
                {
                    string Zamiana = szSrcLine + @"";
                    string[] MalaTablica = Regex.Split(Zamiana, @";");
                    double[] MalaTablicad = new double[MalaTablica.Length];
                    for (int j = 0; j < MalaTablica.Length; j++)
                    {
                        MalaTablicad[j] = Convert.ToDouble(MalaTablica[j]);
                    }
                    parametry.Add(MalaTablicad);

                }
                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return parametry;

        }
        public static List<double[]> WczytajSiecParametry2Warstwa(StreamReader srImput, FileStream fsOutput, int start, int koniec)
        {
            List<double[]> parametry = new List<double[]>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy

                if (i > start + 2 && i <= koniec + 3)
                {
                    string Zamiana = szSrcLine + @"";
                    string[] MalaTablica = Regex.Split(Zamiana, @";");
                    double[] MalaTablicad = new double[MalaTablica.Length];
                    for (int j = 0; j < MalaTablica.Length; j++)
                    {
                        MalaTablicad[j] = Convert.ToDouble(MalaTablica[j]);
                    }
                    parametry.Add(MalaTablicad);

                }
                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return parametry;

        }
        public static List<double[]> WczytajSiecParametry3Warstwa(StreamReader srImput, FileStream fsOutput, int start, int koniec)
        {
            List<double[]> parametry = new List<double[]>();
            string szSrcLine;
            int i = 0;
            while ((szSrcLine = srImput.ReadLine()) != null)
            {
                // dołączanie do tablicy

                if (i > start + 3 && i <= koniec + 4)
                {
                    string Zamiana = szSrcLine + @"";
                    string[] MalaTablica = Regex.Split(Zamiana, @";");
                    double[] MalaTablicad = new double[MalaTablica.Length];
                    for (int j = 0; j < MalaTablica.Length; j++)
                    {
                        MalaTablicad[j] = Convert.ToDouble(MalaTablica[j]);
                    }
                    parametry.Add(MalaTablicad);

                }
                i++;
            }
            // srImput.Close();
            //fsOutput.Close();
            return parametry;

        }
    }
}
