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 SteamWare;

public partial class mod_periodoAnalisi : System.Web.UI.UserControl
{
    #region area protected

    protected intervalloDate _intervallo;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        setIntervallo();
    }

    /// <summary>
    /// gestione del selettore rapido dell'intervallo temporale...
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        intervalloDate _intervallo = new intervalloDate();
        // verifico cosa sia cambiato ed imposto date...
        datario _datario = new datario();
        switch (DropDownList1.SelectedValue)
        {
            case "1_today":
                _intervallo = _datario.giornata(DateTime.Now);
                break;
            case "2_yesterday":
                _intervallo = _datario.giornata(DateTime.Now.AddDays(-1));
                break;
            case "3_last_7":
                _intervallo = _datario.ultimiGiorni(DateTime.Now, 7);
                break;
            case "4_this_week":
                _intervallo = _datario.questaSett(DateTime.Now);
                break;
            case "5_last_30":
                _intervallo = _datario.ultimiGiorni(DateTime.Now, 30);
                break;
            case "6_this_month":
                _intervallo = _datario.questoMese(DateTime.Now);
                break;
            case "7_last_month":
                _intervallo = _datario.estremiMese(DateTime.Now.AddMonths(-1));
                break;
            case "8_this_year":
                _intervallo = _datario.estremiAnno(DateTime.Now);
                break;
            case "9_last_year":
                _intervallo = _datario.estremiAnno(DateTime.Now.AddYears(-1));
                break;
            default:
                break;
        }
        intervalloAnalisi = _intervallo;
        aggiornaDateMostrate();
    }

    private void aggiornaDateMostrate()
    {
        txtInizio.Text = intervalloAnalisi.inizio.ToShortDateString();
        txtFine.Text = intervalloAnalisi.fine.AddDays(-1).ToShortDateString(); // mostro 1 gg in meno xché termina alle 00:00...
        reportUpdate();
    }

    private void setIntervallo()
    {
        intervalloDate _intervallo;
        try
        {
            _intervallo = (intervalloDate)Session["_intervallo"];
        }
        catch
        {
            _intervallo = new intervalloDate();
            _intervallo.fine = DateTime.Now.Subtract(DateTime.Now.TimeOfDay).AddDays(1);
            _intervallo.inizio = _intervallo.fine.AddMonths(-1);
            Session["_intervallo"] = _intervallo;
            Session["_inizio"] = _intervallo.inizio;
            Session["_fine"] = _intervallo.fine;
        }
        txtInizio.Text = _intervallo.inizio.ToShortDateString();
        txtFine.Text = _intervallo.fine.ToShortDateString();
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
        return user_std.UtSn.Traduci(lemma.ToString());
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            txtInizio.ToolTip = traduci("inizioPeriodo");
            txtFine.ToolTip = traduci("finePeriodo");
        }
    }
    protected void txtInizio_TextChanged(object sender, EventArgs e)
    {
        // imposto il selettore a discesa...
        DropDownList1.SelectedIndex = 0;
        // se campo vuoto imposto oggi...
        if (txtInizio.Text == "")
        {
            txtInizio.Text = DateTime.Now.ToShortDateString();
        }
        else
        {
            txtInizio.Text = Convert.ToDateTime(txtInizio.Text).ToShortDateString();
        }
        // aggiorno dati in session...
        aggiornaPeriodo();
    }

    private void aggiornaPeriodo()
    {
        _intervallo = new intervalloDate();
        _intervallo.inizio = Convert.ToDateTime(txtInizio.Text);
        _intervallo.fine = ((DateTime)Convert.ToDateTime(txtFine.Text)).Date.AddDays(1);
        //_intervallo.fine = ((DateTime)Convert.ToDateTime(txtFine.Text)).Date.AddDays(1).AddMinutes(-1);
        intervalloAnalisi = _intervallo;
        reportUpdate();

    }
    protected void txtFine_TextChanged(object sender, EventArgs e)
    {
        // imposto il selettore a discesa...
        DropDownList1.SelectedIndex = 0;
        // se campo vuoto imposto oggi...
        if (txtFine.Text == "")
        {
            txtFine.Text = DateTime.Now.AddDays(1).ToShortDateString();
        }
        else
        {
            txtFine.Text = Convert.ToDateTime(txtFine.Text).ToShortDateString();
        }
        // aggiorno dati in session...
        aggiornaPeriodo();
    }

    protected void reportUpdate()
    {
        // alzo l'evento d update/inserimento e ricarico cache...
        if (eh_doUpdate != null)
        {
            eh_doUpdate(this, new EventArgs());
        }
    }

    #endregion

    #region area public

    public intervalloDate intervalloAnalisi
    {
        get
        {
            return (intervalloDate)Session["_intervallo"];
        }
        set
        {
            intervalloDate interv = value;
            Session["_intervallo"] = interv;
            Session["_inizio"] = interv.inizio;
            Session["_fine"] = interv.fine;
        }
    }

    public void doUpdate()
    {
        aggiornaDateMostrate();
    }

    public void setPeriodoFree()
    {
        // imposto come periodo libero
        DropDownList1.SelectedIndex = 0;
        // inserisco un intervallo date da parametro web.config
        intervalloDate interv = new intervalloDate();
        interv.fine = DateTime.Now.Date.AddDays(1);
        interv.inizio = interv.fine.AddDays(memLayer.ML.confReadInt("defDayFrom"));
        intervalloAnalisi = interv;
        // update!
        doUpdate();
    }

    #region gestione eventi

    public event EventHandler eh_doUpdate;

    #endregion

    #endregion

}
