using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Text.RegularExpressions;


namespace Baza_Reklam.Classes
{
    class KursyWalut
    {
        private string adres = @"http://www.nbp.gov.pl/Kursy/xml/";
        private DataSet test;

        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)";

        SqlCommand command;


        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 ASCIIEncoding.ASCII.GetString(data);
        }
    }
}
