using System;
using System.Data;
using System.Configuration;
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 System.Collections;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Text;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.Presentation.Section.Charts;
using PDFGenerator.BusinessLayer;

namespace PDFGenerator.Presentation.Section {
    public class S31 : ISezione {
       
        public S31() {
            //
            // TODO: Add constructor logic here
            //
        }

        #region ISezione Members

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

            datitab.table = set.Tables["Intermediario"];
            int ChartHeigth = 51 + 23 * datitab.table.Rows.Count;

            datitab.setY(document.getLastPos());
            datitab.setIsRet();
            datitab.setIsLinee(1);
            datitab.setHeader();
            datitab.setCell(175, ceTe.DynamicPDF.TextAlign.Left, Globals.OpenTypeFontVerdana, false);
            datitab.setCell(90, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdana, false);
            datitab.setCell(40, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdana, false);


            //eventuali operazioni sul dataset
            //calcola se entra nella pagina altrimenti aggiunge una nuova pagina. In questa sezione il # di righe � fissato
            if (document.checkMargin(datitab.GetRowDim() * datitab.getNumRow()) || document.checkMargin(ChartHeigth)) document.addPage();

            ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();

            //aggiorna l'indice
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI")
                document.setSezTitoloDiagnosi(dataThread.SezioneReport.Titolo);
            else
                document.setSezTitolo(dataThread.SezioneReport.Titolo);

            DatiGrafico dati = new DatiGrafico();
            DataView view = new DataView(datitab.table);
            view.RowFilter = "";
            dati.dataTab = view.ToTable(false, this.setTableForChart());

            dati.setHeight(ChartHeigth);
            dati.setWidth(204);
            Istogramma isto = new Istogramma();
            document.InsertGrafico(isto.getGrafico(dati), 349, document.getLastPos() - 12);

            datitab.setY(document.getLastPos());
            datitab.setX(document.getMargineLeft());
            datitab.setCellSpace(0);
            Tabella tab = new Tabella();
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
            //setta posizione tabella
            document.InsertTable(tab.getTabella(datitab));

            float dim = datitab.GetRowDim() * (datitab.getNumRow() + 1);
            datitab = new DatiTabella();
            datitab.table = set.Tables["IntermediarioTotale"];

            datitab.setY(document.getLastPos() + dim);
            datitab.setX(document.getMargineLeft());
            datitab.setCell(175, ceTe.DynamicPDF.TextAlign.Left, Globals.OpenTypeFontVerdanaB, true);
            datitab.setCell(90, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdanaB, true);
            datitab.setCell(40, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdanaB, true);
            document.InsertTable(tab.getTabella(datitab));

            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(360, document.getLastPos() + ChartHeigth - 38, 195, 23, 0, new RgbColor(232, 236, 237)));

            FormatNum format = new FormatNum();
            ArrayList Labels = format.CreaCustom(dati.getValMax());

            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Labels[0].ToString(), 360, document.getLastPos() + ChartHeigth - 29, 120, 10, Globals.OpenTypeFontVerdana, 6, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Labels[1].ToString(), 360, document.getLastPos() + ChartHeigth - 29, 100, 10, Globals.OpenTypeFontVerdana, 6, ceTe.DynamicPDF.TextAlign.Center, ceTe.DynamicPDF.CmykColor.Black));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Labels[2].ToString(), 403, document.getLastPos() + ChartHeigth - 29, 100, 10, Globals.OpenTypeFontVerdana, 6, ceTe.DynamicPDF.TextAlign.Center, ceTe.DynamicPDF.CmykColor.Black));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Labels[3].ToString(), 448, document.getLastPos() + ChartHeigth - 29, 100, 10, Globals.OpenTypeFontVerdana, 6, ceTe.DynamicPDF.TextAlign.Center, ceTe.DynamicPDF.CmykColor.Black));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Labels[4].ToString(), 452, document.getLastPos() + ChartHeigth - 29, 100, 10, Globals.OpenTypeFontVerdana, 6, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black));
            dim += datitab.GetRowDim() * datitab.getNumRow();

            /////////
            if (dim > ChartHeigth)
                document.setLastPos(dim);
            else
                document.setLastPos(ChartHeigth);

        }

        //======================================Gestisce il salto pagina=============================================
        public void writeSezioneTorta(DataThread dataThread)
        {

            DocumentPDF document = dataThread.DocumentPDF;
            DatiTabella datitab = new DatiTabella();
            DataSetS31 set = (DataSetS31)dataThread.Data.DatiSezione;
            int MaxRow;
            float dim = 0;
            bool cut = true;
            DataTable vista;
            Tabella tab = new Tabella();
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;


            datitab.table = set.Tables["Intermediario"];
            vista = datitab.table;
            int ChartHeigth = 140;

            datitab.setY(document.getLastPos());
            datitab.setIsRet();
            datitab.setIsLinee(1);
            datitab.setHeader();
            datitab.setCell(175, ceTe.DynamicPDF.TextAlign.Left, Globals.OpenTypeFontVerdana, false);
            datitab.setCell(90, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdana, false);
            datitab.setCell(40, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdana, false);
            datitab.setCellSpace(0);


            //eventuali operazioni sul dataset
            //calcola se entra nella pagina altrimenti aggiunge una nuova pagina. In questa sezione il # di righe � fissato
            if (document.checkMargin(ChartHeigth)) document.addPage();

            //aggiorna l'indice
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI")
                document.setSezTitoloDiagnosi(dataThread.SezioneReport.Titolo);
            else
                document.setSezTitolo(dataThread.SezioneReport.Titolo);

            DatiGrafico dati = new DatiGrafico();
            DataView view = new DataView(datitab.table);
            view.RowFilter = "";
            dati.dataTab = view.ToTable(false, this.setTableForChart());

            dati.setHeight(ChartHeigth);
            dati.setWidth(140);
            Torta isto = new Torta();
            document.InsertGrafico(isto.getGrafico(dati), 360, document.getLastPos() - 11);

            ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();

            while (cut) {
                if (vista.Rows.Count != 0 && document.checkMargin(datitab.GetRowDim() * (vista.Rows.Count + 2))) {
                    MaxRow = document.getWritableRow(23, false);
                    vista.Columns.Add("ID");
                    int i = 0;
                    foreach (DataRow myRow in vista.Rows) {
                        if (i < MaxRow - 2)
                            myRow["ID"] = 1;
                        else
                            myRow["ID"] = 2;
                        i++;
                    }
                    view = new DataView(vista);
                    view.RowFilter = ("ID = 1");
                }
                else
                    cut = false;

                datitab.table = view.ToTable(false, setTableForTable());

                datitab.setY(document.getLastPos());
                datitab.setX(document.getMargineLeft());
                //setta posizione tabella
                document.InsertTable(tab.getTabella(datitab));

                dim += datitab.GetRowDim() * (datitab.getNumRow() + 1);

                if (cut) {
                    document.changePage(389, dim);
                    document.nextPage(document.getMargineLeft());
                    datitab.setHeader();
                    dim = 0;
                    view = new DataView(vista);
                    view.RowFilter = ("ID = 2");
                    vista = view.ToTable();
                    vista.Columns.Remove(vista.Columns["ID"]);
                }
            }

            datitab = new DatiTabella();
            datitab.table = set.Tables["IntermediarioTotale"];

            datitab.setY(document.getLastPos() + dim);
            datitab.setX(document.getMargineLeft());
            datitab.setCell(175, ceTe.DynamicPDF.TextAlign.Left, Globals.OpenTypeFontVerdanaB, true);
            datitab.setCell(90, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdanaB, true);
            datitab.setCell(40, ceTe.DynamicPDF.TextAlign.Right, Globals.OpenTypeFontVerdanaB, true);

            document.InsertTable(tab.getTabella(datitab));
            dim += datitab.GetRowDim() * datitab.getNumRow();

            if (dim > ChartHeigth)
                document.setLastPos(dim);
            else
                document.setLastPos(ChartHeigth);

        }
        //=============================================================================================================

        private string[] setTableForTable() {
            string[] Columns = new String[6];
            //eventuali operazioni sul dataset
            Columns[0] = "Descrizione";
            Columns[1] = "Controvalore";
            Columns[2] = "Percentuale";
            Columns[3] = "Red";
            Columns[4] = "Green";
            Columns[5] = "Blue";
            return Columns;
        }

        private string[] setTableForChart() {
            string[] Columns = new String[4];
            Columns[0] = "Controvalore";
            Columns[1] = "Red";
            Columns[2] = "Green";
            Columns[3] = "Blue";
            return Columns;
        }

        #endregion
    }
}