using System;
using System.Collections.Generic;
using System.Text;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Text;
using System.Configuration;
using System.Reflection;
using System.IO;
using ceTe.DynamicPDF.Imaging;
using Dundas.Charting.WebControl;
using System.Threading;
using System.Globalization;
using ceTe.DynamicPDF.PageElements;

namespace prova
{
    public enum TipoContratto
    {
        Old = 0,
        Affluent = 1,
        Private = 2
    }
    public enum TipoLettera
    {
        BenvenutoPosticipata,
        BenvenutoContestuale,
        Accompagno
    }
    public enum TipoReport
    {
        Diagnosi,
        Monitoraggio
    }

}
namespace PDFGenerator
{
    public class LetteraBA
    {
        //private byte[] data;
        //public byte[] Data
        //{
        //    get { return data; }
        //}

        //protected Image firma;

        //protected Document lettera;
        //protected int fontSize,
        //                idLettera;


        //protected DateTime dataGenerazione;



        //public void writePDF() {
        //    data = lettera.Draw();
        //    //DECOMMENTARE PER EFFETTUARE LE PROVE, SALVA LA LETTERA SUL PERCORSO
        //    //SPECIFICATO SU pathScritturaLettera
        //    //lettera.Draw(path + nomeLettera + ".pdf"); 

        //}

        protected static Image GetImageByResourceName(string resourceName, int X, int Y, float ratio)
        {
            Assembly a = Assembly.GetExecutingAssembly();


            try
            {
                using (Stream stream = a.GetManifestResourceStream(resourceName))
                {
                    Image gif = new Image(stream, X, Y, ratio);
                    return gif;
                }
            }
            catch
            {
                return null;
            }
        }


        //protected abstract void settaCampi();



       /// int MargineInfPX = 29;
      //  int MargineSupPX = 14;
      //  int MargineSxPX = 29;
      //  int MargineDxPX = 14;

//int xAreaCliente = 308;
     //   int yAreaCliente = 186;
     //   int wAreaCliente = 250;
      //  int hAreaCliente = 90;

     //   int xAreaLuogo = 0;
   //     int yAreaLuogo = 258;
  //      int wAreaLuogo = 480;
   //     int hAreaLuogo = 30;

        //int xAreaOggetto = 0;
        //int yAreaOggetto = 288;
        //int hAreaOggetto = 480;
        //int wAreaOggetto = 30;

        //int xAreaCorpo = 0;
        //int yAreaCorpo = 328;
        //int hAreaCorpo = 480;
        //int wAreaCorpo = 320;

        //int xAreaSaluti = 250;
        //int yAreaSaluti = 677;
        //int hAreaSaluti = 230;
        //int wAreaSaluti = 56;

        //int xOffSetfirma = 0;
        //int yOffSetyfirma = 0;


       // int xLineNota = 0;
       // int yLineNota = 712;
       // int hLineNota = 150;
       // float wLineNota = 0.5F;

        //int xNota = 0;
       // int yNota = 715;
        //int wNota = 580;
       // int hNota = 30;
       // int sFontNota = 9;

        //int fontSize = 11;


        private void SetDefault()
        {
            //MargineInfPX = 29;
            //MargineSupPX = 14;
            //MargineSxPX = 29;
            //MargineDxPX = 14;

            //xAreaCliente = 308;
            //yAreaCliente = 186;
            //wAreaCliente = 250;
            //hAreaCliente = 90;

            //xAreaLuogo = 0;
            //yAreaLuogo = 258;
            //wAreaLuogo = 480;
            //hAreaLuogo = 30;

            //xAreaOggetto = 0;
            //yAreaOggetto = 288;
            //hAreaOggetto = 480;
            //wAreaOggetto = 30;

            //xAreaCorpo = 0;
            //yAreaCorpo = 328;
            //hAreaCorpo = 480;
            //wAreaCorpo = 320;

            //xAreaSaluti = 250;
            //yAreaSaluti = 677;
            //hAreaSaluti = 230;
            //wAreaSaluti = 56;

            //xOffSetfirma = 0;
            //yOffSetyfirma = 0;


            //xLineNota = 0;
            //yLineNota = 712;
            //hLineNota = 150;
            //wLineNota = 0.5F;

            //xNota = 0;
            //yNota = 715;
            //wNota = 480;
            //hNota = 30;
            //sFontNota = 7;

            //fontSize = 11;
        }

        public LetteraBA(string id)
        {
            SetDefault();
        }
        /*
            public void aa(TipoLettera tipoLettera, TipoContratto tipoContratto, TipoReport tipoReport)  {
                string testo = "";

                if (tipoLettera == TipoLettera.BenvenutoPosticipata && tipoReport == TipoReport.Diagnosi)
                {
                    SetBenvenutoPosticipata();
                    testo = "<P align='justify'>Gentile Cliente,\r\n\r\nla ringraziamo per aver aderito /$TIPOCOMTRATTO2$/: il servizio � stato attivato.\r\n\r\nLe ricordiamo che /$TIPOCOMTRATTO$/ sar� regolato, per gli aspetti che lo caratterizzano, dal Capo III delle �Norme contrattuali�  riportate nel �Contratto per la prestazione dei servizi di consulenza in materia di investimenti e di collocamento�, nonch� dalle condizioni economiche riportate nel Modulo di Adesione /$TIPOCOMTRATTO2$/.\r\n\r\n<b>Allegato a questa comunicazione trova il report di Diagnosi del suo Portafoglio.</b>\r\n\r\nIl report rappresenta il suo patrimonio in /$BANCA$/, distribuito per Aree di Bisogno sulla base delle esigenze che ci ha manifestato. Inoltre, secondo i criteri specificati nel report stesso,  rappresenta gli investimenti realizzati presso terzi intermediari ed eventuali altri beni di cui lei ha fornito informazioni. In questo modo lei pu� disporre di una diagnosi globale della sua ricchezza mobiliare e immobiliare.\r\n\r\nLe ricordiamo che, con cadenza trimestrale, ricever� il Report di Monitoraggio.\r\n\r\nIl suo private banker<font size='1'><sup>1</sup></font>, la sua filiale e il servizio assistenza clienti, attivo dal luned� al venerd�, dalle 8.30 alle 18.30, al numero /$NUMTEL$/, sono a sua disposizione per qualsiasi ulteriore richiesta di chiarimento si rivelasse necessaria.\r\n\r\nLa ringraziamo per la fiducia che ha voluto rinnovarci, e cogliamo questa occasione per porgerle i nostri pi� cordiali saluti.</P>";
                }

                if (tipoLettera == TipoLettera.BenvenutoContestuale && tipoReport == TipoReport.Diagnosi)
                {
                    SetBenvenutoContestuale();
                    testo = "Affluent Contestuale Sampaolo   <P align='justify'>Gentile cliente,\r\n\r\nla ringraziamo per aver sottoscritto in data /$DATA$/. il  �Contratto per la prestazione dei servizi di consulenza in materia di investimenti e di collocamento�. Il contratto � stato da noi accettato e, al contempo, abbiamo attivato /$TIPOCOMTRATTO$/ a cui lei ha scelto di aderire.\r\n\r\nI servizi saranno regolati dalle disposizioni contenute nelle �Norme contrattuali� riportate nel predetto contratto e, in particolare, per gli aspetti che caratterizzano /$TIPOCOMTRATTO$/, dal Capo III,  nonch� dalle condizioni economiche riportate nel Modulo di Adesione /$TIPOCOMTRATTO2$/.\r\n\r\n<b>Allegato a questa comunicazione trova il report di Diagnosi del suo Portafoglio.</b>\r\n\r\nIl report rappresenta il suo patrimonio in /$BANCA$/, distribuito per Aree di Bisogno sulla base delle esigenze che ci ha manifestato. Inoltre, secondo i criteri specificati nel report stesso,  rappresenta gli investimenti realizzati presso terzi intermediari ed eventuali altri beni di cui lei ha fornito informazioni. In questo modo lei pu� disporre di una diagnosi globale della sua ricchezza mobiliare e immobiliare.\r\n\r\nLe ricordiamo che, con cadenza trimestrale, ricever� il Report di Monitoraggio.\r\n\r\nIl suo private banker<font size=''1''><sup>1</sup></font>, la sua filiale e il servizio assistenza clienti, attivo dal luned� al venerd�, dalle 8.30 alle 18.30, al numero /$NUMTEL$/, sono a sua disposizione per qualsiasi ulteriore richiesta di chiarimento si rivelasse necessaria.\r\n\r\nLa ringraziamo per la fiducia che ha voluto rinnovarci, e cogliamo questa occasione per porgerle i nostri pi� cordiali saluti.</P>";

                }

                if(tipoLettera==TipoLettera.Accompagno)
                                            SetAccompagno();
                 
            }//GeneraLettera
        */


        private static prova.TipoReport tipoReport;
        private static prova.TipoLettera tipoLettera;
        //private static prova.TipoContratto tipoContratto;
        private static string rete = "";

        public static byte[] GetLetteraBA(BusinessLayer.DataThread dataThread)
        {

            tipoReport = dataThread.TipoReport.ToUpper().Trim().Equals("DIAGNOSI") ? prova.TipoReport.Diagnosi : prova.TipoReport.Monitoraggio;
            tipoLettera = (dataThread.AdesioneSuccessivaAvanzato || dataThread.ContrattoOld) ? prova.TipoLettera.BenvenutoPosticipata : prova.TipoLettera.BenvenutoContestuale;
            //switch (dataThread.TipoContratto)
            //{
            //    case TipoContratto.Old:
            //        tipoContratto = prova.TipoContratto.Old;
            //        break;
            //    case TipoContratto.Affluent:
            //        tipoContratto = prova.TipoContratto.Affluent;
            //        break;
            //    case TipoContratto.Private:
            //        tipoContratto = prova.TipoContratto.Private;
            //        break;
            //}
            rete = dataThread.Rete.Trim().ToUpper();

            string testo = GetTesto();
            string oggetto = GetOggetto();
            string saluti = GetSaluti();
            string nome = "";
            string cognome = "";
            string indirizzo = "";
            string appelativo = "";
            return Genera(testo, nome, cognome, indirizzo, appelativo, oggetto, saluti);
        }

        private static byte[] Genera(string txtTesto, string txtNome, string txtCognome, string txtIndirizzo, string txtAppellativo, string txtOggetto, string txtSaluti)
        {
            int MargineInfPX = 29;
            int MargineSupPX = 14; 
             int MargineSxPX = 29;
            int MargineDxPX = 14;

            int xAreaCliente = 308;
            int yAreaCliente = 186;
            int wAreaCliente = 250;
            int hAreaCliente = 90;

            int xAreaLuogo = 0;
            int yAreaLuogo = 258;
            int wAreaLuogo = 480;
            int hAreaLuogo = 30;

            int xAreaOggetto = 0;
            int yAreaOggetto = 288;
            int hAreaOggetto = 480;
            int wAreaOggetto = 30;

            int xAreaCorpo = 0;
            int yAreaCorpo = 328;
            int hAreaCorpo = 480;
            int wAreaCorpo = 320;

            //int xAreaSaluti = 250;
            //int yAreaSaluti = 677;
            int xAreaSaluti = 120;
            int yAreaSaluti = 750;
            int hAreaSaluti = 230;
            int wAreaSaluti = 56;

            //int xOffSetfirma = 0;
            //int yOffSetyfirma = 0;


            int xLineNota = 0;
            int yLineNota = 712;
            int hLineNota = 150;
            float wLineNota = 0.5F;

            int xNota = 0;
            int yNota = 715;
            int wNota = 580;
            int hNota = 30;
            int sFontNota = 7;

            int fontSize = 11;
            //********************

            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            //this.rete = rete;
            // this.data = null;
            //this.appellativo = appellativo;
            //this.testoOggetto = obj;
            //this.testoSaluti = testoSaluti;
            //this.indirizzo = indirizzo;
            //this.idLettera = idLettera;
            //this.testo = testo;
            //this.nome = nome;
            //this.cognome = cognome;
            //this.codiceContratto = codiceContratto;
            DateTime dataGenerazione = DateTime.Now;







            Document lettera = new Document();
            System.Reflection.Assembly thisExe = System.Reflection.Assembly.GetExecutingAssembly();
            System.IO.Stream file = null;
            if (rete.ToUpper() == "F")
                file = thisExe.GetManifestResourceStream("PDFGeneratorLetteraBenvenuto.TemplateBF_New2.pdf");
            else
                file = thisExe.GetManifestResourceStream("PDFGeneratorLetteraBenvenuto.templateSPI_New2.pdf");

            using (file)
            {
                PdfDocument pp = new PdfDocument(file);
                Page page = new ImportedPage(pp.GetPage(1));
                PageDimensions dimensions = new PageDimensions(PageSize.A4, PageOrientation.Portrait);
                dimensions.BottomMargin = MargineInfPX;
                dimensions.TopMargin = MargineSupPX;
                dimensions.LeftMargin = MargineSxPX;
                dimensions.RightMargin = MargineDxPX;
                page.Dimensions = dimensions;
                lettera.Pages.Add(page);



                string txtCliente = txtAppellativo + "\r\n" + txtNome + " " + txtCognome + "\r\n" + txtIndirizzo;

                FormattedTextArea cliente = new FormattedTextArea(txtCliente,
                                                xAreaCliente,
                                                yAreaCliente,
                                                wAreaCliente,
                                                hAreaCliente,
                                                FontFamily.Times,
                                                fontSize,
                                                true);



                DateTime dataFineTrimestre = Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_LetteraAccompagnamento"], new CultureInfo("it-IT", false).DateTimeFormat);
                string txtLuogo = "Torino, " + dataFineTrimestre.ToString("dd MMMM yyyy", new CultureInfo("it-IT", false).DateTimeFormat);

                FormattedTextArea luogo = new FormattedTextArea(txtLuogo,
                                                xAreaLuogo,
                                                yAreaLuogo,
                                                wAreaLuogo,
                                                hAreaLuogo,
                                                FontFamily.Times,
                                                fontSize,
                                                true);
                luogo.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Right;

                FormattedTextArea oggetto = new FormattedTextArea(txtOggetto,
                                                xAreaOggetto,
                                                yAreaOggetto,
                                                hAreaOggetto,
                                                wAreaOggetto,
                                                FontFamily.Times,
                                                fontSize,
                                                true);



                FormattedTextArea corpo = new FormattedTextArea(txtTesto,
                                                                xAreaCorpo,
                                                                yAreaCorpo,
                                                                hAreaCorpo,
                                                                wAreaCorpo,
                                                                FontFamily.Times,
                                                                fontSize,
                                                                true);

                corpo.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;


                FormattedTextArea saluti = new FormattedTextArea(txtSaluti,
                                                                 xAreaSaluti,
                                                                 yAreaSaluti,
                                                                 hAreaSaluti,
                                                                 wAreaSaluti,
                                                                FontFamily.Times,
                                                                fontSize,
                                                                true);

                //int xOffSetfirma = 0;
                //int yOffSetyfirma = 0;
                //int xFirma = (int)(saluti.X + (saluti.Width - 94) / 2);
                //int yFirma = (int)(saluti.Y - saluti.Height + 15);
                int xFirma = (int)(saluti.X + (saluti.Width - 94) / 2);
                int yFirma = (int)(saluti.Y - saluti.Height + 15);
                Image firma = null;
                //if (ristampa)
                //    firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.Firma_Ristampa.jpg", xFirma, yFirma, (float)0.2);
                //else

                switch (rete.ToUpper())
                {
                    case "F":
                        firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.jpg", xFirma, yFirma, (float)0.2);
                        break;
                    case "S":
                        //    firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_SP.jpg", xFirma, yFirma, (float)0.2);
                        firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.jpg", xFirma, yFirma + 20, (float)0.15);  //Andrea Rosaspina
                        break;
                    case "W":
                        firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_SanPaoloInvest.jpg", xFirma, yFirma, (float)0.2);
                        break;
                }

                ceTe.DynamicPDF.PageElements.Line lineNota = new ceTe.DynamicPDF.PageElements.Line(xLineNota, yLineNota, xLineNota + hLineNota, yLineNota, wLineNota, RgbColor.Black);

                ceTe.DynamicPDF.PageElements.Label Nota = new ceTe.DynamicPDF.PageElements.Label(
                   "�Il private banker � un professionista della consulenza finanziaria, previdenziale e assicurativa, iscritto all�albo dei promotori finanziari."
                   , xNota
                   , yNota
                   , wNota
                   , hNota
                   , Globals.OpenTypeFontTimes
                   , sFontNota
                   );

                page.Elements.Add(corpo);
                page.Elements.Add(cliente);
                page.Elements.Add(oggetto);
                page.Elements.Add(luogo);
                page.Elements.Add(firma);
                page.Elements.Add(saluti);
                page.Elements.Add(lineNota);
                page.Elements.Add(Nota);


                return lettera.Draw();
            }
        }
        private static string GetTesto()
        {
            string testo = "";
            if (tipoLettera == prova.TipoLettera.BenvenutoPosticipata)
                testo = "<P align='justify'>Gentile Cliente,\r\n\r\nla ringraziamo per aver aderito /$TIPOCOMTRATTO2$/: il servizio � stato attivato.\r\n\r\nLe ricordiamo che /$TIPOCOMTRATTO$/ sar� regolato, per gli aspetti che lo caratterizzano, dal Capo III delle �Norme contrattuali�  riportate nel �Contratto per la prestazione dei servizi di consulenza in materia di investimenti e di collocamento�, nonch� dalle condizioni economiche riportate nel Modulo di Adesione /$TIPOCOMTRATTO2$/.\r\n\r\n<b>Allegato a questa comunicazione trova il report di Diagnosi del suo Portafoglio.</b>\r\n\r\nIl report rappresenta il suo patrimonio in /$BANCA$/, distribuito per Aree di Bisogno sulla base delle esigenze che ci ha manifestato. Inoltre, secondo i criteri specificati nel report stesso,  rappresenta gli investimenti realizzati presso terzi intermediari ed eventuali altri beni di cui lei ha fornito informazioni. In questo modo lei pu� disporre di una diagnosi globale della sua ricchezza mobiliare e immobiliare.\r\n\r\nLe ricordiamo che, con cadenza trimestrale, ricever� il Report di Monitoraggio.\r\n\r\nIl suo private banker<font size='1'><sup>1</sup></font>, la sua filiale e il servizio assistenza clienti, attivo dal luned� al venerd�, dalle 8.30 alle 18.30, al numero /$NUMTEL$/, sono a sua disposizione per qualsiasi ulteriore richiesta di chiarimento si rivelasse necessaria.\r\n\r\nLa ringraziamo per la fiducia che ha voluto rinnovarci, e cogliamo questa occasione per porgerle i nostri pi� cordiali saluti.</P>";

            if (tipoLettera == prova.TipoLettera.BenvenutoContestuale)
                testo = "Affluent Contestuale Sampaolo   <P align='justify'>Gentile cliente,\r\n\r\nla ringraziamo per aver sottoscritto in data /$DATA$/. il  �Contratto per la prestazione dei servizi di consulenza in materia di investimenti e di collocamento�. Il contratto � stato da noi accettato e, al contempo, abbiamo attivato /$TIPOCOMTRATTO$/ a cui lei ha scelto di aderire.\r\n\r\nI servizi saranno regolati dalle disposizioni contenute nelle �Norme contrattuali� riportate nel predetto contratto e, in particolare, per gli aspetti che caratterizzano /$TIPOCOMTRATTO$/, dal Capo III,  nonch� dalle condizioni economiche riportate nel Modulo di Adesione /$TIPOCOMTRATTO2$/.\r\n\r\n<b>Allegato a questa comunicazione trova il report di Diagnosi del suo Portafoglio.</b>\r\n\r\nIl report rappresenta il suo patrimonio in /$BANCA$/, distribuito per Aree di Bisogno sulla base delle esigenze che ci ha manifestato. Inoltre, secondo i criteri specificati nel report stesso,  rappresenta gli investimenti realizzati presso terzi intermediari ed eventuali altri beni di cui lei ha fornito informazioni. In questo modo lei pu� disporre di una diagnosi globale della sua ricchezza mobiliare e immobiliare.\r\n\r\nLe ricordiamo che, con cadenza trimestrale, ricever� il Report di Monitoraggio.\r\n\r\nIl suo private banker<font size=''1''><sup>1</sup></font>, la sua filiale e il servizio assistenza clienti, attivo dal luned� al venerd�, dalle 8.30 alle 18.30, al numero /$NUMTEL$/, sono a sua disposizione per qualsiasi ulteriore richiesta di chiarimento si rivelasse necessaria.\r\n\r\nLa ringraziamo per la fiducia che ha voluto rinnovarci, e cogliamo questa occasione per porgerle i nostri pi� cordiali saluti.</P>";
            return testo;
        }//GetTesto
        private static string GetOggetto()
        {

            return "";
        }//GetOggetto
        private static string GetSaluti()
        {
            string saluti = "";
            if (rete.Equals("F"))
                saluti = "<P align='center'>Matteo Colafrancesco\r\nL�Amministratore Delegato\r\nSanpaolo Invest SIM S.p.A.</P>'";
            else
                //FC 26062015 Aggionamento nuova Ragione Sociale
                //saluti="<P align='center'>Matteo Colafrancesco\r\nL�Amministratore Delegato e Direttore Generale\r\nBanca Fideuram S.p.A.</P>";
                // FC 26062015 Nuovo Amministratore Delegato 
                //saluti = "<P align='center'>Matteo Colafrancesco\r\nL�Amministratore Delegato e Direttore Generale\r\nFideuram S.p.A.</P>";
                saluti = "<P align='center'>Paolo Molesini\r\nL�Amministratore Delegato e Direttore Generale\r\nFideuram S.p.A.</P>";
            return saluti;
        }//GetSaluti
    }
















}