using System;
using System.Data;
using ceTe.DynamicPDF.Text;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer;

namespace PDFGenerator.Presentation.Section {
    public class S171 : ISezione {


	    string Titolo = " ";
	    private decimal totalePatNonCoperto = 0;
	    bool hasColumnCtvNonCoperto;
	    bool hasColumnCtvNonCopertoTotali;
	    private string _testointroduttivo;

   

    private TipoReport _tipologiaReport;
    /// <summary>
    /// Modalità di visualizzazione:
    /// La modalità normale mostra la colonna Intermediario(S76 in modalità normale),
    /// La modalità alternativa mostra la colonna AreaProgetto(S76 in modalità alternativa).
    /// Se non specificato di default viene impostata la modalità normale.
    /// </summary>
    public enum EmodalitaRappresentazione
    {
        normale,
        alternativa
    }

    private EmodalitaRappresentazione _modalitaRappresentazione = EmodalitaRappresentazione.normale;


    /// <summary>
    /// Modalità di visualizzazione:
    /// La modalità normale mostra la colonna Intermediario(S76 in modalità normale),
    /// La modalità alternativa mostra la colonna AreaProgetto(S76 in modalità alternativa).
    /// Se non specificato di default viene impostata la modalità normale.
    /// </summary>
    public EmodalitaRappresentazione modalitaRappresentazione
    {
        get { return _modalitaRappresentazione; }
        set { _modalitaRappresentazione = value; }
    }

    public TipoReport TipologiaReport
    {
        get { return _tipologiaReport; }
        set { _tipologiaReport = value; }
    }

    /// <summary>
    /// Imposta o recupere il testo introduttivo della sezione.
    /// </summary>
    public string TestoIntroduttivo
    {
        get { return _testointroduttivo; }
        set { _testointroduttivo = value; }
    }


    /// <summary>
    /// Costruttore
    /// </summary>
    public S171()
    {

    }

    /// <summary>
    /// Costruttore
    /// </summary>
    /// <param name="modalitavisualizzazione"></param>
    public S171(EmodalitaRappresentazione modalitavisualizzazione)
    {
        _modalitaRappresentazione = modalitavisualizzazione;
    }


    #region ISezione Members



        public void writeSezione(DataThread dataThread)
        {
            DocumentPDF document = dataThread.DocumentPDF;
            DatiTabella datitab = new DatiTabella();
            DataSetS76 set = (DataSetS76)dataThread.Data.DatiSezione;

            int fontTab = 7;
            int fontTabTotale = 8;

            #region Verifica presenza prodotti parzialmente 
                DataTable datiTotaleConto = set.Tables["TotaleConti"];
                totalePatNonCoperto = 0;

                #region Gestione Colonna controvalore non coperto
                if (datiTotaleConto.ExtendedProperties.Contains("HasColumnCtvNonCoperto"))
                    hasColumnCtvNonCopertoTotali = Convert.ToBoolean(datiTotaleConto.ExtendedProperties["HasColumnCtvNonCoperto"]);
                #endregion

                // verifico anche se va inserito il controvalore non coperto
                if (datiTotaleConto.Rows.Count > 0 && datiTotaleConto.Rows[0]["ValoreNonCoperto"] != DBNull.Value && hasColumnCtvNonCopertoTotali)
                    totalePatNonCoperto = (decimal)datiTotaleConto.Rows[0]["ValoreNonCoperto"];
                #endregion


                datitab.table = set.Tables["ContoCorrente"];

                #region Gestione Colonna controvalore non coperto
                if (datitab.table.ExtendedProperties.Contains("HasColumnCtvNonCoperto"))
                    hasColumnCtvNonCoperto = Convert.ToBoolean(datitab.table.ExtendedProperties["HasColumnCtvNonCoperto"]);
        #endregion

        DataView view = new DataView(datitab.table);
        view.RowFilter = "";

       
        //calcola se entra nella pagina altrimenti aggiunge una nuova pagina.
        if (document.checkMargin(datitab.GetRowDim() * 3))
            document.addPage();

        if (dataThread.TipoReport.ToUpper() == "DIAGNOSI")
        {
            document.setSezTitoloDiagnosi(Titolo);
            document.setChapterHeader(_testointroduttivo);
        }
        else
        {
            document.setSezTitolo(Titolo);
            document.setChapterHeader(_testointroduttivo, 0, 520, 8);
        }

        Tabella tab = new Tabella(document.getMargineLeft(), document.getLastPos());
        tab.HeaderFont = 8;

        tab.Header = true;              
        datitab.table = view.ToTable();
        tab.Datasource = datitab.table;
        //if (dataThread.TipoReport.ToUpper() == "MONITORAGGIO")
        // {
        //    tab.AltezzaCella = 30;
        //    tab.HeaderFont = 9;
        //    fontTab = 9;
        //    fontTabTotale = 9;
        // }

        if (Convert.ToBoolean((datitab.table.Columns["AreaProgetto"].ExtendedProperties["ToRemove"])))
        {
            // LA COLONNA AreaProgetto NON VIENE VISUALIZZATA

            tab.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", hasColumnCtvNonCoperto ? 66 : 80, TipoAllineamento.SINISTRA, false, fontTab, false));
            tab.Colonne.Add(new Colonna("Contratto", "Contratto/<BR>Dossier", hasColumnCtvNonCoperto ? 66 : 80, TipoAllineamento.SINISTRA, false, fontTab, false));
            
            /**** Fix per le Lettere di Benvenuto 15/03/2023 - Pino ****/
            //tab.Colonne.Add(new Colonna("<IMAGE>", " ", 5, TipoAllineamento.SINISTRA, false, 7, false));
              tab.Colonne.Add(new Colonna("IMAGE", " ", 5, TipoAllineamento.SINISTRA, false, fontTab, false));
            /***************************************************************************************************/

            tab.Colonne.Add(new Colonna("Descrizione", "Descrizione", hasColumnCtvNonCoperto ? 197 : 267, TipoAllineamento.SINISTRA, false, fontTab, false));
            tab.Colonne.Add(new Colonna("Controvalore", "Controvalore €", hasColumnCtvNonCoperto ? 90 : 80, TipoAllineamento.DESTRA, false, fontTab, false));
            
            if (hasColumnCtvNonCoperto)
                tab.Colonne.Add(new Colonna("ControvaloreNonCoperto", "Controvalore<BR>non coperto €", 90, TipoAllineamento.DESTRA, false, fontTab, false));

        }
        else
        {
            // LA COLONNA AreaProgetto VIENE VISUALIZZATA
            //V DataSottoscrizione portata a 60 da 66 per portare a quasi 90 areaProgetto come è sulla S88, se occorre si poterbbe rosicchiare qualcosa dalla colonna contratto
            tab.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", hasColumnCtvNonCoperto ? 60 : 80, TipoAllineamento.SINISTRA, false, fontTab, false));
            tab.Colonne.Add(new Colonna("Contratto", "Contratto/<BR>Dossier", hasColumnCtvNonCoperto ? 66 : 80, TipoAllineamento.SINISTRA, false, fontTab, false));
            
            /**** Fix per le Lettere di Benvenuto 15/03/2023 - Pino ****/
            //tab.Colonne.Add(new Colonna("<IMAGE>", " ", 5, TipoAllineamento.SINISTRA, false, fontTab, false));
            tab.Colonne.Add(new Colonna("IMAGE", " ", 5, TipoAllineamento.SINISTRA, false, fontTab, false));
            /***************************************************************************************************/

            tab.Colonne.Add(new Colonna("Descrizione", "Descrizione", hasColumnCtvNonCoperto ? 115 : 181, TipoAllineamento.SINISTRA, false, fontTab, false));
            switch (_modalitaRappresentazione)
            {
                case EmodalitaRappresentazione.normale:
                    tab.Colonne.Add(new Colonna("Intermediario", "Intermediario", 86, TipoAllineamento.SINISTRA, false, fontTab, false));
                    break;
                case EmodalitaRappresentazione.alternativa:
                    tab.Colonne.Add(new Colonna("AreaProgetto", "Area/<BR>Progetto", 86, TipoAllineamento.SINISTRA, false, fontTab, false));
                    break;
            }
             tab.Colonne.Add(new Colonna("Controvalore", "Controvalore €", hasColumnCtvNonCoperto ? 90 : 80, TipoAllineamento.DESTRA, false, fontTab, false));
            
            if (hasColumnCtvNonCoperto)
                tab.Colonne.Add(new Colonna("ControvaloreNonCoperto", "Controvalore<BR>non coperto €", 90, TipoAllineamento.DESTRA, false, fontTab, false));

        }
       
        
      

        tab.Draw(datitab,document);

        //TOTALI
        datitab = new DatiTabella();
        datitab.table = set.Tables["TotaleConti"];

        Tabella tabellaTotali = new Tabella(document.getMargineLeft(),document.getLastPos() + tab.AltezzaTabella + 25);
        tabellaTotali.HeaderFont = 8;

        tabellaTotali.Header = false;
        tabellaTotali.SaltoPagina = false;
        tabellaTotali.Datasource=datitab.table; 
         
        // footer
        if (hasColumnCtvNonCoperto)
        {
            tabellaTotali.Colonne.Add(new Colonna("Descrizione", "", 332, TipoAllineamento.SINISTRA, true, fontTabTotale, true));
            tabellaTotali.Colonne.Add(new Colonna("Valore", "", 90, TipoAllineamento.DESTRA, true, fontTabTotale, true));
            tabellaTotali.Colonne.Add(new Colonna("ValoreNonCoperto", "", 90, TipoAllineamento.DESTRA, true, fontTabTotale, true));
        }
        else
        {
            if (datitab.table.Columns.Contains("ValoreNonCoperto"))
                datitab.table.Columns.Remove("ValoreNonCoperto");

            tabellaTotali.Colonne.Add(new Colonna("Descrizione", "", 420, TipoAllineamento.SINISTRA, true, fontTabTotale, true));
            tabellaTotali.Colonne.Add(new Colonna("Valore", "", 92, TipoAllineamento.DESTRA, true, fontTabTotale, true));
        }

        tabellaTotali.Draw(datitab,document);
        //tab.AddNotaPartiteViaggianti(tabellaTotali.AltezzaTabella + tab.AltezzaTabella, document);

        ///// setto la posizione aggiornata
        document.setLastPos(tabellaTotali.AltezzaTabella + tab.AltezzaTabella + 5);

    }
    
    
    public void setTitolo(string label)
    {
        Titolo = label;
    }

    #endregion
}


}