using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ReportVS;
using ceTe.DynamicPDF.Merger;
using System.Collections.Generic;
using LogFilePDF;

 
public partial class ReinvioASelecta : System.Web.UI.Page
{
    bool periodico;
    string tipoReport;

    protected void Page_Load(object sender, EventArgs e)
    {

        int identificativoPDF = Convert.ToInt32(Request.QueryString.Get("pdfID"));
        int pdfC6 = Convert.ToInt32(Request.QueryString.Get("pdfC6"));
        string rete = Request.QueryString.Get("Rete");
        string codiceFiscale = Request.QueryString.Get("CodiceFiscale");
        //string tipoReport = Request.QueryString.Get("tipoReport");
        ReInvio(identificativoPDF, pdfC6, rete, codiceFiscale);

    }


    private byte[] getPDF(int idPDF, int pdfC6, string rete, string codiceFiscale)
    {
        DocumentPDF documentPDF = new DocumentPDF();


        List<Parametro> parametri = new List<Parametro>();
        Parametro idq = new Parametro();
        idq.ParameterName = "Id";
        idq.DbType = DbType.Int32;
        idq.Value = idPDF;
        parametri.Add(idq);

        DataTable dati = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "[dbo].[sp_getCheckPeriodico]", parametri);
        periodico = false;
        tipoReport = string.Empty;
        if(dati.Rows.Count > 0) {
            periodico = (Convert.ToBoolean(dati.Rows[0]["FlagPeriodico"]));
            tipoReport = dati.Rows[0]["TipoReport"].ToString();
        }
        
        byte[] letteraAccompagnamento;

        if (!periodico)
            letteraAccompagnamento = GestoreLettera.componiLetteraRistampa(codiceFiscale, rete, LetteraAccompagnamento.TipoReport.Diagnosi, idPDF,false);
        else
        if(tipoReport.ToUpper() == "DIAGNOSI")
            letteraAccompagnamento = GestoreLettera.componiLetteraRistampa(codiceFiscale, rete,LetteraAccompagnamento.TipoReport.Diagnosi, idPDF,true);
        else
            letteraAccompagnamento = GestoreLettera.componiLetteraRistampa(codiceFiscale, rete, LetteraAccompagnamento.TipoReport.Monitoraggio, idPDF,true);
        
        byte[] pdf = documentPDF.getDataFromDB(idPDF, pdfC6);
        
        PdfDocument pdfLetteraAccompagnamento = new PdfDocument(letteraAccompagnamento);
        PdfDocument pdfDoc = new PdfDocument(pdf);
        MergeDocument mDoc = MergeDocument.Merge(pdfLetteraAccompagnamento, pdfDoc);
        return mDoc.Draw();
    }
    private void ReInvio(int idPDF, int pdfC6, string rete, string codiceFiscale) {

        List<Parametro> parametri = new List<Parametro>();
        Parametro idq = new Parametro();
        idq.ParameterName = "Id";
        idq.DbType = DbType.Int32;
        idq.Value = idPDF;
        parametri.Add(idq);
        
        DataTable dati = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "[dbo].[sp_getCheckPeriodico]", parametri);
        periodico = false;
        tipoReport = string.Empty;
        if (dati.Rows.Count > 0)
        {
            periodico = (Convert.ToBoolean(dati.Rows[0]["FlagPeriodico"]));
            tipoReport = dati.Rows[0]["TipoReport"].ToString();
        }
        idq.ParameterName = "IdReport";
        int checkLetteraRistampa;
                
        if(!periodico)
            checkLetteraRistampa = (int)DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6Mart].[GESTIONE_SELECT_PDF_FTP_RISTAMPA_SI_NO]", parametri);
        else
            checkLetteraRistampa = (int)DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[GESTIONE_SELECT_PDF_FTP_RISTAMPA_SI_NO]", parametri);
       
        if (checkLetteraRistampa == 1)
        {
            List<Parametro> listaParametri = new List<Parametro>();
            Parametro id = new Parametro();
            id.ParameterName = "IdReport";
            id.DbType = DbType.Int32;
            id.Value = idPDF;
            listaParametri.Add(id);

            Parametro image = new Parametro();
            image.ParameterName = "Img";
            image.DbType = DbType.Binary;
            image.Value = getPDF(idPDF, pdfC6, rete, codiceFiscale);
            listaParametri.Add(image);

            int nuovoId = DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServer, "[dbo].[C6_S_WritePDFintoDBRistampa]", listaParametri);


            List<Parametro> listaParametriRistampa = new List<Parametro>();
            Parametro id1 = new Parametro();
            id1.ParameterName = "Id";
            id1.DbType = DbType.Int32;
            id1.Value = idPDF;
            listaParametriRistampa.Add(id1);

            Parametro idNuovo = new Parametro();
            idNuovo.ParameterName = "IdNuovo";
            idNuovo.DbType = DbType.Int32;
            idNuovo.Value = nuovoId;
            listaParametriRistampa.Add(idNuovo);
            if(!periodico)
                DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServerStampeC6, "[C6Mart].[GESTIONE_INSERT_PDF_FTP_RISTAMPA]", listaParametriRistampa);
            else
                DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[GESTIONE_INSERT_PDF_FTP_RISTAMPA]", listaParametriRistampa);
            GestoreLogPDF gl = new GestoreLogPDF(nuovoId);
            gl.Applicativo = "HD";
            gl.scriviLog(EventLog.SELECTA_RistampaReport);
        }
        else {
            //if (Response.ContentType.ToUpper() != "TEXT/HTML")
            //{
            //    Response.ContentType = "TEXT/HTML";
            //    Response.Clear();
            //}

            string msgErrore = "Il documento in questione � gi� in attesa di essere inviato a Selecta.";
            //string mostraMessaggioDaCodice = @"MostraMessaggioDaCodice(\""Si � verificato un errore durante l'elaborazione della richiesta.\\n Per il dettaglio vedere l'Event Viewer al seguente link:\\n http://rmsrv06-wse/EVENTVIEWER/eventviewer.aspx\"");";
            string command = "alert(\"" + msgErrore + "\");";
            string mostraMessaggioDaCodice = @"<script language=\""javascript\"" type=\""text/javascript\"">alert(\""" + msgErrore + "\\\");</script>";
            ClientScript.RegisterStartupScript(typeof(string), "messaggioErrore",
                                                     "<script language=\"javascript\" type=\"text/javascript\">" + "\n" +
                                                     "<!--" + "\n" +
                                                     command + "\n" +
                                                     "//-->" + "\n" +
                                                     "</script>");
        }
    }
}