using DevExpress.Export;
using DevExpress.Web;
using DevExpress.XtraPrinting;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace OlympiaIntranet
{
    //public partial class RicercaSottostanti : System.Web.UI.Page
    //{
    //    protected void Page_Init(object sender, EventArgs e)
    //    {
    //        // Session["Titolo"] = null; non mettere altrimenti l'esportazione in excel risulta sempre vuota!!
    //    }

    //    protected void Page_Load(object sender, EventArgs e)
    //    {
    //        if (!IsPostBack) BindGrid();
    //    }

    //    protected void btnCercaTitolo_Click(object sender, EventArgs e)
    //    {
    //        // Rileva titolo selezionato in gvTitoli
    //        ASPxGridView grid = gridlookupTitoli.GridView;
    //        object objTitolo = grid.GetRowValues(grid.FocusedRowIndex, new string[] { "cod_tit" });
    //        if (objTitolo != null) Session["Titolo"] = objTitolo.ToString();
    //        else Session["Titolo"] = null;

    //        BindGrid();
    //    }

    //    protected void btnEsportaExcel_Click(object sender, EventArgs e)
    //    {
    //        BindGrid();

    //        ExporterRicercaSottostanti.ExportSelectedRowsOnly = false;
    //        ExporterRicercaSottostanti.FileName = DateTime.Now.ToString("yyyyMMdd_HHmm") + " - SottostantiRilevati";
    //        XlsxExportOptionsEx op = new XlsxExportOptionsEx() { ExportType = ExportType.DataAware }; // in DataAware mode l'evento ASPxGridViewExporter_RenderBrick non viene eseguito!!
    //        ExporterRicercaSottostanti.WriteXlsxToResponse(op);
    //    }

    //    private void BindGrid()
    //    {
    //        if (Session["Titolo"] != null)
    //        {
    //            DataTable dati = CommonClass.execQuery_Datatable_Sql("oi_RicercaSottostanti",
    //                                                                 Properties.Settings.Default.SqlConnection,
    //                                                                 "",
    //                                                                 "",
    //                                                                 "",
    //                                                                 -1,
    //                                                                 -1,
    //                                                                 null,
    //                                                                 "",
    //                                                                 "",
    //                                                                 null,
    //                                                                 "",
    //                                                                 Session["Titolo"].ToString());
    //            gvSottostantiTrovati.DataSource = dati;
    //            gvSottostantiTrovati.DataBind();
    //        }
    //        else
    //        {
    //            gvSottostantiTrovati.DataSource = null;
    //            gvSottostantiTrovati.DataBind();
    //        }
    //    }

    //}

    public partial class RicercaSottostanti : System.Web.UI.Page
    {
        private const string CacheKey = "CacheDatiSottostanti";

        protected void Page_Init(object sender, EventArgs e)
        {
            gvSottostantiTrovati.DataBinding += gvSottostantiTrovati_DataBinding;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindGrid();
        }

        protected void btnCercaTitolo_Click(object sender, EventArgs e)
        {
            // Rileva titolo selezionato in gvTitoli
            ASPxGridView grid = gridlookupTitoli.GridView;
            object objTitolo = grid.GetRowValues(grid.FocusedRowIndex, new string[] { "cod_tit" });

            if (objTitolo != null)
                Session["Titolo"] = objTitolo.ToString();
            else
                Session["Titolo"] = null;

            // Quando cerchi un nuovo titolo azzeri la cache
            Session[CacheKey] = null;

            BindGrid();
        }

        protected void btnEsportaExcel_Click(object sender, EventArgs e)
        {
            BindGrid();

            ExporterRicercaSottostanti.ExportSelectedRowsOnly = false;
            ExporterRicercaSottostanti.FileName = DateTime.Now.ToString("yyyyMMdd_HHmm") + " - SottostantiRilevati";
            XlsxExportOptionsEx op = new XlsxExportOptionsEx() { ExportType = ExportType.DataAware };
            ExporterRicercaSottostanti.WriteXlsxToResponse(op);
        }

        private void BindGrid()
        {
            if (Session["Titolo"] != null)
            {
                // Usa la cache se disponibile
                DataTable dati = Session[CacheKey] as DataTable;

                if (dati == null)
                {
                    dati = CommonClass.execQuery_Datatable_Sql("oi_RicercaSottostanti",
                                                                Properties.Settings.Default.SqlConnection,
                                                                "",
                                                                "",
                                                                "",
                                                                -1,
                                                                -1,
                                                                null,
                                                                "",
                                                                "",
                                                                null,
                                                                "",
                                                                Session["Titolo"].ToString());

                    Session[CacheKey] = dati; // salva in cache
                }

                gvSottostantiTrovati.DataSource = dati;
                gvSottostantiTrovati.DataBind();
            }
            else
            {
                gvSottostantiTrovati.DataSource = null;
                gvSottostantiTrovati.DataBind();
            }
        }

        private void gvSottostantiTrovati_DataBinding(object sender, EventArgs e)
        {
            if (Session["Titolo"] != null)
            {
                DataTable dati = Session[CacheKey] as DataTable;
                if (dati == null)
                {
                    // safety: se la cache è scaduta ricarico da DB
                    dati = CommonClass.execQuery_Datatable_Sql("oi_RicercaSottostanti",
                                                                Properties.Settings.Default.SqlConnection,
                                                                "",
                                                                "",
                                                                "",
                                                                -1,
                                                                -1,
                                                                null,
                                                                "",
                                                                "",
                                                                null,
                                                                "",
                                                                Session["Titolo"].ToString());
                    Session[CacheKey] = dati;
                }

                gvSottostantiTrovati.DataSource = dati;
            }
        }
    }

}