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

namespace GMW.WebUserControls
{
  public partial class mod_testata : System.Web.UI.UserControl
  {
    /// <summary>
    /// caricamento pagina
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        // se l'utente NON c'è torno a login...
        if (!user_std.UtSn.isAuth)
        {
          string lastPage = Request.Url.LocalPath.Split('/').Last();
          if (lastPage != "" && lastPage.IndexOf("login") < 0)
          {
            Session["nextPage"] = lastPage;
          }
          Response.Redirect("login");
        }
        else
        {
          PagCorrente();
          updateTreeMenu();
        }
        // fix componenti
        hlUser.DataBind();
      }
    }

    public string cssIconPag
    {
      get
      {
        string answ = "";
        try
        {
          DataLayer_AnagGen.PermessiRow riga = (DataLayer_AnagGen.PermessiRow)user_std.UtSn.permessi.Select(string.Format("URL = '{0}'", user_std.pagCorrente))[0];
          answ = traduci(riga.DESCRIZIONE);
        }
        catch
        { }
        return answ;
      }
    }
    public string nomePag
    {
      get
      {
        string answ = "";
        try
        {
          DataLayer_AnagGen.PermessiRow riga = (DataLayer_AnagGen.PermessiRow)user_std.UtSn.permessi.Select(string.Format("URL = '{0}'", user_std.pagCorrente))[0];
          answ = traduci(riga.NOME);
        }
        catch
        { }
        return answ;
      }
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// aggiornamento del menù
    /// </summary>
    private void updateTreeMenu()
    {
      try
      {
        if (string.IsNullOrEmpty(user_std.UtSn.mappaSito))
        {
          Response.Redirect("default.aspx", false);
        }

        XmlMenu.Data = user_std.UtSn.mappaSito;
        XmlMenu.XPath = "mainMenu/menu";
        XmlMenu.DataBind();
      }
      catch
      {
        Response.Redirect(user_std.pagCorrente, false);
      }
    }
    /// <summary>
    /// forza l'update del menù sx
    /// </summary>
    public void forzaUpdateMenu()
    {
      user_std.UtSn.ricaricaMappaSito();
      updateTreeMenu();
    }
    public string liClass(string nomeElem)
    {
      string answ = "";
      try
      {
        if (user_std.pagCorrente.IndexOf(nomeElem) >= 0) answ = "active";
      }
      catch
      { }
      return answ;
    }
    /// <summary>
    /// tooltip che indica se user autorizzato 
    /// </summary>
    public string usrAuthToolTip
    {
      get
      {
        string answ = "";
        try
        {
          if (userAuthOk)
          {
            answ = string.Format("{0} - {1}", traduci("UserAuthOk"), OpAuth.currAuth.CognomeNome);
          }
          else
          {
            answ = traduci("UserAuthKo");
          }
        }
        catch
        { }
        return answ;
      }
    }
    /// <summary>
    /// text x user autorizzato 
    /// </summary>
    public string usrAuthText
    {
      get
      {
        string answ = "...";
        try
        {
          if (userAuthOk)
          {
            answ = OpAuth.currAuth.CognomeNome;
          }
          else
          {
            answ = "...";
          }
        }
        catch
        { }
        return answ;
      }
    }
    /// <summary>
    /// css x colore icona user auth
    /// </summary>
    public string usrAuthCss
    {
      get
      {
        string answ = "";
        try
        {
          if (userAuthOk)
          {
            answ = "checkOk";
          }
          else
          {
            answ = "checkKo";
          }
        }
        catch
        { }
        return answ;
      }
    }
    protected bool userAuthOk
    {
      get
      {
        return OpAuth.isAuth;
      }
    }
    /// <summary>
    /// salva in variabile pagina il nome della pagina corrente
    /// </summary>
    protected void PagCorrente()
    {
      string[] uri = Request.Url.LocalPath.Split('/');
      // salvo pagina corrente
      user_std.pagCorrente = uri.Last();
      if (string.IsNullOrEmpty(user_std.pagPrecedente))
      {
        user_std.pagPrecedente = user_std.pagCorrente;
      }
    }
    /// <summary>
    /// effettua un update completo dei valori in sessione
    /// </summary>
    private void doDataUpdate(bool doFullReset)
    {
      if (doFullReset)
      {
        // aggiorno vocabolario
        DataWrap.DW.resetVocabolario();
        // reset dati in cache x DbConfig...
        memLayer.ML.resetAppConf();
        // svuoto session e cache per rileggere i dati da Db
        Session.RemoveAll();
        memLayer.ML.setSessionVal("nextPage", user_std.pagCorrente);
        Response.Redirect("login");
      }
      else
      {
        Response.Redirect(user_std.pagCorrente);
      }
    }
    /// <summary>
    /// click su pagina corrente, fa update SOLO pagina!
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbnUpdatePage_Click(object sender, EventArgs e)
    {
      doDataUpdate(false);
    }
    /// <summary>
    /// click su pagina corrente, fa update!
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbnUpdate_Click(object sender, EventArgs e)
    {
      doDataUpdate(true);
    }

    protected void lbShowNumKey_Click(object sender, EventArgs e)
    {
      // cambio valore boolean di visualizzazione tastiera numerica a video...
      memLayer.ML.setSessionVal("showNumKey", !memLayer.ML.BoolSessionObj("showNumKey"));
      // ricarico
      Response.Redirect(user_std.pagCorrente);
    }
  }
}