using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;
using System.Net;



namespace EstrazioneAnagrafica
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Log.ScriviLog("Inizio procedura");
        }

      

        private void button1_Click(object sender, EventArgs e)
        {

            
            //disabilito il pulsante per impedire nuovi click fino al termine
            button1.Enabled = false;
            lblAttendere.Visible = true;

            //preso qui https://www.youtube.com/watch?v=2qQgctSi4iY
            //backgroundWorker1.RunWorkerAsync();
            FormsProgramLogic l = new FormsProgramLogic();
            l.ButtonNotificator = button1;
            l.LabelNotificator = lblAttendere;
            l.ParentForm = this;
            l.StartForm();
          
        }

        //private void btnInviaFile_Click(object sender, EventArgs e)
        //{

        //    backgroundWorker2.RunWorkerAsync();

        //}

        //private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        //{

        //    Log.ScriviLog("Preparo estrazione indirizzi");
        //    //-----------------------------------------------------lancio la sp 'Estrazione_Indirizzi_CO'
        //    backgroundWorker1.ReportProgress(20);
        //    DataTable tabellaIndirizzi = LanciaEstrazioneIndirizzi();

        //    if (tabellaIndirizzi.Rows.Count == 0)
        //    {
        //        System.Windows.Forms.Application.Exit();
        //        Log.ScriviLog("Fine procedura - Nessun indirizzo estratto");
        //    }

        //    //prima di scrivere il txt rinomino l'eventuale esistente
        //    ControllaErinomina();

        //    //-----------------------------------------------------dalla tabella scrivo un txt
        //    backgroundWorker1.ReportProgress(40);
        //    CreaTxt(tabellaIndirizzi);
           

        //    //fine
        //    backgroundWorker1.ReportProgress(80);

        //}

      


        //private void CreaTxt(DataTable tabellaIndirizzi)
        //{

        //    Log.ScriviLog("CreaTxt... Start ");

        //    string pathOut = UtilityManager.getAppSetting("Application_Folder");
        //    string estensioneFile = "." + ConfigurationManager.AppSettings["EstensioneFileHost"];
        //    string nomeFile = ConfigurationManager.AppSettings["NomeFileHost"];
        //    string nomeFileOut = nomeFile + estensioneFile;
        //    //StreamWriter outFile = new StreamWriter(pathOut + @"\EstrazioneIndirizziCO.txt");
        //    StreamWriter outFile = new StreamWriter(pathOut + @"\" + nomeFileOut);
        //    //scrivo il record iniziale
        //    outFile.WriteLine("FLUSSOANAGRAFICA" + DateTime.Now.ToString("yyyyMMdd"));
        //    //ciclo sulla tabella
        //    Anagrafica anagagrafica = new Anagrafica();
        //    foreach (DataRow dr in tabellaIndirizzi.Rows)
        //    {
        //        anagagrafica.codiceFiscale = Convert.ToString(dr["codiceFiscale"]);
        //        anagagrafica.codiceContratto = Convert.ToString(dr["contratto"]);
        //        anagagrafica.indirizzo = Convert.ToString(dr["indirizzo"]);
        //        anagagrafica.provincia = Convert.ToString(dr["provincia"]);
        //        anagagrafica.citta = Convert.ToString(dr["citta"]);
        //        anagagrafica.cap = Convert.ToString(dr["cap"]);
        //        anagagrafica.presso = Convert.ToString(dr["presso"]);
        //        anagagrafica.nazione = Convert.ToString(dr["nazione"]);
        //        anagagrafica.email = Convert.ToString(dr["email"]);

        //        string riga = anagagrafica.codiceFiscale + anagagrafica.codiceContratto + anagagrafica.indirizzo + anagagrafica.provincia +
        //            anagagrafica.citta + anagagrafica.cap + anagagrafica.presso + anagagrafica.nazione + anagagrafica.email;

        //        outFile.WriteLine(riga);
        //    }


        //    outFile.WriteLine("ZZZZZZZZZZZZZZZZ99999999999");
        //    outFile.Close();

        //    Log.ScriviLog("CreaTxt... Fine ");

        //}

        //private DataTable LanciaEstrazioneIndirizzi()
        //{
        //    Log.ScriviLog("LanciaEstrazioneIndirizzi... Start ");

        //    List<Parametro> parametri = new List<Parametro>();
        //    DataTable tabellaIndirizzi = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerStampeC6, "[dbo].[Estrazione_Indirizzi_CO]", parametri);
        //    Log.ScriviLog(tabellaIndirizzi.Rows.Count + " righe estratte");

        //    Log.ScriviLog("LanciaEstrazioneIndirizzi... Fine ");

        //    return tabellaIndirizzi;
        //}


       


       

        //private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        //{
        //    if (e.ProgressPercentage == 20)
        //    {
        //        lblAttendere.Text = "Estraggo gli indirizzi dal db.......";
        //    }
        //    else if (e.ProgressPercentage == 40)
        //    {
        //        lblAttendere.Text = "Creo il file txt......";
        //    }
           
        //    else if (e.ProgressPercentage == 80)
        //    {
        //        lblAttendere.Text = "Creazione TXT terminata!!!";
        //    }
           
        //}

        //private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        //{

        //    //abilito il pulsante invia
        //    //btnInviaFile.Enabled = true;

        //    //faccio partire il task dello ftp
        //    backgroundWorker2.RunWorkerAsync();
        //    lblAttendere.Visible = false;
        //}


        //private static byte[] StrToByteArray(string str)
        //{
        //    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        //    return encoding.GetBytes(str);
        //}



       

        //private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        //{

        //    //prima di inviare il nuovo flusso, rinomino il vecchio con la data attuale
        //    backgroundWorker2.ReportProgress(10);
        //    rinominaFileFtp();

        //    //lancio ftp verso la macchina condivisa \\bolsena
        //    backgroundWorker2.ReportProgress(40);
        //    inviaFlussoHostFTP();

        //    //fine
        //    backgroundWorker2.ReportProgress(100);

           

        //}

        



        //private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
        //{
        //    if (e.ProgressPercentage == 10)
        //    {

        //        lblAttendere.Text = "Rinomino il file sulla macchina target (Bolsena)......";
        //        lblAttendere.Visible = true;
        //    }
        //    else if (e.ProgressPercentage == 40)
        //    {
        //        lblAttendere.Text ="Invio il file via FTP......";
               

        //    }
        //    else if (e.ProgressPercentage == 100)
        //    {
        //        lblAttendere.Text = "Invio terminato!!!";
                

        //    }
        //}

        //private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        //{
        //    System.Threading.Thread.Sleep(5000);//this codes make your application waiting for 5 seconds
        //    //sistemo i pulsanti e la label
        //    lblAttendere.Visible = false;
           
        //    button1.Enabled = true;
        //}


        //private void inviaFlussoHostFTP()
        //{
        //    Log.ScriviLog("inviaFlussoHostFTP... Start ");

        //    string estensioneFile = "." + ConfigurationManager.AppSettings["EstensioneFileHost"];
        //    string nomeFile = ConfigurationManager.AppSettings["NomeFileHost"];
        //    string nomeFileBackup = nomeFile + estensioneFile;
        //    //string pathFileBackup = ConfigurationManager.AppSettings["PathFileHostBackup"];
        //    //if (!pathFileBackup.EndsWith("\\"))
        //    //    pathFileBackup += "\\";

        //    //pathFileBackup += nomeFileBackup;

        //    string nomeFileHost = nomeFile + estensioneFile;

        //    //StringBuilder flussoHost = new StringBuilder();
        //    //flussoHost.Append(pathFileBackup.ToString() + "\r\n");

        //    string pathFileStream = ConfigurationManager.AppSettings["Application_Folder"]  + "\\" + nomeFileHost;
        //    Log.ScriviLog("inviaFlussoHostFTP... invio il file" + pathFileStream);
        //    StreamReader sourceStream = new StreamReader(pathFileStream);
        //    //byte[] flussoInByte = StrToByteArray(flussoHost.ToString());
        //    byte[] flussoInByte = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());


        //    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ConfigurationManager.AppSettings["FTPServerHost"] + nomeFileHost);
        //    request.Method = WebRequestMethods.Ftp.UploadFile;
        //    request.ContentLength = flussoInByte.Length;
        //    request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FTPUserHost"], ConfigurationManager.AppSettings["FTPPasswordHost"]);

        //    byte[] buffer = new byte[4096];
        //    using (Stream writer = request.GetRequestStream())
        //    using (MemoryStream ms = new MemoryStream(flussoInByte))
        //    {
        //        int bytesRead = 0;
        //        int totalBytes = 0;

        //        do
        //        {
        //            bytesRead = ms.Read(buffer, 0, buffer.Length);
        //            if (bytesRead > 0)
        //            {
        //                writer.Write(buffer, 0, bytesRead);
        //                totalBytes += bytesRead;
        //            }
        //        } while (bytesRead > 0);
        //    }

        //    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        //    //V
        //    //LogFTP(response);
        //    //
        //    response.Close();

        //    //File.WriteAllBytes(pathFileBackup, flussoInByte);
        //    Log.ScriviLog("inviaFlussoHostFTP... Fine, status {0} " + response.StatusDescription);


        //}

        ////se c'è un altro file txt target nella directory lo rinomino con la data del giorno (es: EstrazioneIndirizziCO_20151111.txt)
        //private void ControllaErinomina()
        //{

        //    Log.ScriviLog("ControllaErinomina... Start ");
        //    string pathOut = UtilityManager.getAppSetting("Application_Folder");
        //    string estensioneFile = "." + ConfigurationManager.AppSettings["EstensioneFileHost"];
        //    string nomeFile = ConfigurationManager.AppSettings["NomeFileHost"];
        //    string nomeFileOut = nomeFile + estensioneFile;
        //    string extensionFilter = nomeFileOut;

        //    string[] filePaths = Directory.GetFiles(pathOut, extensionFilter);
        //    if (filePaths.Length > 0) {

        //        try
        //        {
        //            //il file è stato trovato, lo rinomino
        //            string nuovoNomeFile = nomeFile + "_" + DateTime.Now.ToString("yyyyMMdd") + estensioneFile;
        //            string oldPath = pathOut + "\\" + nomeFileOut;
        //            string newPath = pathOut + "\\" + nuovoNomeFile;
        //            System.IO.File.Move(oldPath, newPath);
        //        }
        //        catch (Exception)
        //        {
                    
        //            //probabilmente il file già esiste non faccio nulla;
        //        }
               

        //    }

        //    Log.ScriviLog("ControllaErinomina... Fine ");

        //}

        //private void rinominaFileFtp()
        //{

        //    Log.ScriviLog("rinominaFileFtp... Start ");
        //    //preso qui: https://social.msdn.microsoft.com/Forums/en-US/8c541130-b571-4b1a-9117-ac610f3e8b34/ftpwebrequestrenameto-property?forum=netfxnetcom
        //    string estensioneFile = "." + ConfigurationManager.AppSettings["EstensioneFileHost"];
        //    string nomeFile = ConfigurationManager.AppSettings["NomeFileHost"];
        //    string nomeFileHost = nomeFile + estensioneFile;
        //    string FileUri = ConfigurationManager.AppSettings["FTPServerHost"] + nomeFileHost;

        //    //string FileUri = "ftp://someftp/somedir/test.tmp"; 

        //    FtpWebRequest ftp = (FtpWebRequest) WebRequest.Create(FileUri);

        //    ftp.Method = WebRequestMethods.Ftp.Rename;
        //    ftp.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FTPUserHost"], ConfigurationManager.AppSettings["FTPPasswordHost"]);
        //    //ftp.Credentials = new NetworkCredential(UserName, Password);

        //    //Don't include the path
        //    string nuovoNomeFile = nomeFile + "_" + DateTime.Now.ToString("yyyyMMdd") + estensioneFile;
        //    ftp.RenameTo = nuovoNomeFile;

        //    FtpWebResponse r = (FtpWebResponse)ftp.GetResponse();
        //    Log.ScriviLog("rinominaFileFtp... Fine response {0} " + r.StatusDescription);
            
        //}

        private void label1_Click(object sender, EventArgs e)
        {

        }

    }
}