using GMW_data;
using SteamWare;
using System;
using System.Linq;
using System.Web.UI;

namespace GMW
{
  public partial class POST_Finiti_IN : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        refreshPagCorr();
        updatePrinterPostazione();
        // fix css...
        Postazione.CssClass = "stileAttesa";
        // imposto pos abilitata x cancellazione
        mod_storicoAzioniOperatore1.IdxPosizione2del = memLayer.ML.cdvi("IdxPosizioneFiniti");
        // fix cod Blocco sel, provo a prendere da DB...
        dlSelCodBlocco.DataBind();
        dlSelCodBlocco.SelectedValue = CodBloccoSel;
        refreshBloccoChild();
        // pulisco dir temp dai file dei cartellini stampati
        reportPrinter.obj.pulisciDir();
      }
      // update vari...
      doUpdate();
      mod_storicoAzioniOperatore1.eh_stampa += new EventHandler(mod_storicoAzioniOperatore1_eh_stampa);
      mod_PostFinMultIN.doUpdate();
      mod_PostFinMultIN.eh_reqUpdate += mod_PostRX_NT1_eh_reqUpdate;
      mod_selLineaNtDt1.eh_lineSelected += mod_selLineaNtDt1_eh_doRefresh;
      mod_selLineaNtDt1.eh_showHideStorico += mod_selLineaNtDt1_eh_showHideStorico;
    }
    /// <summary>
    /// refresh pagina corrente prima di altri task...
    /// </summary>
    private void refreshPagCorr()
    {
      // lo calcolo...
      string[] uri = Request.Url.LocalPath.Split('/');
      // salvo pagina corrente
      user_std.pagCorrente = uri.Last();

    }

    /// <summary>
    /// Handles the showHideStorico event of the mod_selLineaNtDt1_eh control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    private void mod_selLineaNtDt1_eh_showHideStorico(object sender, EventArgs e)
    {
      fixStorico();
    }
    /// <summary>
    /// Handles the doRefresh event of the mod_selLineaNtDt1_eh control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
    private void mod_selLineaNtDt1_eh_doRefresh(object sender, EventArgs e)
    {
      doUpdate();
      mod_PostFinMultIN.doResetData();
      mod_PostFinMultIN.doUpdate();
    }
    /// <summary>
    /// richiesta update del controllo SAO
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void mod_PostRX_NT1_eh_reqUpdate(object sender, EventArgs e)
    {
      doUpdate();
    }
    /// <summary>
    /// aggiorna messaggi e css
    /// </summary>
    private void updateMessCss()
    {
      lblWarning.Text = Postazione.warningText;
      lblMessaggi.Text = Postazione.messaggiText;
      pnlAll.CssClass = Postazione.CssClass;
    }
    /// <summary>
    /// richiesta (ri)stampa UDC
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void mod_storicoAzioniOperatore1_eh_stampa(object sender, EventArgs e)
    {
      mod_PostFinMultIN.ristampa();
    }
    /// <summary>
    /// sistemo visualizzazione pannelli
    /// </summary>
    private void fixPanels()
    {
      // default: moduli NON visibili SE non ho linea indicata..
      bool enableBtn = false;
      if (Postazione.currCodCella != "" && dlSelCodBlocco.SelectedValue != "W00") enableBtn = true;
      mod_PostFinMultIN.Visible = enableBtn;
      fixStorico();
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// toggle controllo storico
    /// </summary>
    private void fixStorico()
    {
      pnlSAO.Visible = Postazione.showStorico;
    }
    /// <summary>
    /// update generale controlli
    /// </summary>
    private void doUpdate()
    {
      updateMessCss();
      fixPanels();
      mod_storicoAzioniOperatore1.doUpdate();
    }
    /// <summary>
    /// calcola postazione corrente (ip, name, printer)
    /// </summary>
    private void updatePrinterPostazione()
    {
      Postazione.IP = Request.UserHostName;
      Postazione.setupPrinter();
      // mostro warning se postazione non configurata...
      if (Postazione.printer == "n.d.")
      {
        lblWarning.Text = traduci("lblWarnPostNonConf");
      }
    }


    protected void dlSelCodBlocco_SelectedIndexChanged(object sender, EventArgs e)
    {
      CodBloccoSel = dlSelCodBlocco.SelectedValue;
      refreshBloccoChild();
      mod_PostFinMultIN.doResetData();
      mod_PostFinMultIN.doUpdate();
    }

    private void refreshBloccoChild()
    {
      // cambio codBlocco x selettore...
      mod_selLineaNtDt1.preCodLineNT = dlSelCodBlocco.SelectedValue;
      mod_selLineaNtDt1.preCodLineDT = dlSelCodBlocco.SelectedValue;
      mod_selLineaNtDt1.preCodLinea = dlSelCodBlocco.SelectedValue;
      mod_selLineaNtDt1.doUpdate();
    }

    /// <summary>
    /// CodBlocco (della linea FIO) impostata SALVATA SU DB...
    /// </summary>
    public string CodBloccoSel
    {
      get
      {
        string answ = "";
        try
        {
          answ = utils.obj.RTVal(user_std.pagCorrente, "CodBlocco_" + Postazione.IP);
        }
        catch
        { }
        if (string.IsNullOrEmpty(answ))
        {
          answ = "W00";
        }
        return answ;
      }
      set
      {
        utils.obj.taRTPV.upsert(user_std.pagCorrente, "CodBlocco_" + Postazione.IP, value);
      }
    }
  }
}