using System;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace Baza_Reklam.Classes
{
    internal class KursyWalut
    {
        private readonly SqlCommand command;
        private readonly DataSet test;
        private string adres = @"http://www.nbp.gov.pl/Kursy/xml/";

        private string query = "INSERT INTO Kursy_Walut " +
                               " (Numer_Tabeli, Data_Publikacji, nazwa_waluty, przelicznik, Kod_Waluty, Kurs_Sredni) " +
                               " VALUES(@Numer_Tabeli,@Data_Publikacji,@nazwa_waluty,@przelicznik,@Kod_Waluty,@Kurs_Sredni)";


        public KursyWalut()
        {
            test = new DataSet();
            command = new SqlCommand(query, new SqlConnection(ConnString.getConnString().Value));
        }


        private DateTime dataOstatniegoKursu()
        {
            SqlCommand command = new SqlCommand(
                "select top 1 Data_Publikacji from dbo.Kursy_Walut order by Data_Publikacji desc",
                new SqlConnection(ConnString.getConnString().Value));

            command.Connection.Open();

            object o = command.ExecuteScalar();

            command.Connection.Close();

            return (DateTime) (o ?? DateTime.Today);
        }

        public void pobierzKursy()
        {
            DateTime od = dataOstatniegoKursu();

            //lista kursow ze strony
            string dir = LoadDir();

            MatchCollection matchCol;

            while (od <= DateTime.Today)
            {
                string pattern = "a" + @"\d\d\d[z]" + od.ToString("yyMMdd");

                Regex reg = new Regex(pattern);

                matchCol = reg.Matches(dir);

                for (int i = 0; i < matchCol.Count; i++)
                {
                    //MessageBox.Show(matchCol[i].Value);
                    pobierzKurs(matchCol[i].Value);
                }

                od = od.AddDays(1);
            }
        }

        public void pobierzKurs(string nazwaTabeli)
        {
            string adresTabeli = adres + nazwaTabeli + ".xml";

            test.Clear();
            test.ReadXml(adresTabeli);

            command.Connection.Open();

            foreach (DataRow d in test.Tables["pozycja"].Rows)
            {
                command.Parameters.Clear();

                command.Parameters.AddWithValue("@Numer_Tabeli", test.Tables["tabela_kursow"].Rows[0][0]);
                command.Parameters.AddWithValue("@Data_Publikacji", test.Tables["tabela_kursow"].Rows[0][1]);
                command.Parameters.AddWithValue("@nazwa_waluty", d[0]);
                command.Parameters.AddWithValue("@przelicznik", d[1]);
                command.Parameters.AddWithValue("@Kod_Waluty", d[2]);
                command.Parameters.AddWithValue("@Kurs_Sredni", Convert.ToDecimal(d[3]));

                command.ExecuteNonQuery();
            }

            command.Connection.Close();
        }

        private string LoadDir()
        {
            WebClient wcCL = new WebClient();
            byte[] data = wcCL.DownloadData(adres + "dir.txt");
            return Encoding.ASCII.GetString(data);
        }
    }
}