using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;

//using CFD.BR.Linq;


namespace bajaWare.Clases
{
    public sealed class Permisos
    {
        private static readonly Permisos instance = new Permisos();
        //private DBClass.Objetos objetos;
        InterfacesServicesPermisos.IinterfacesServicePermisos objetos = new InterfacesServicesPermisos.IinterfacesServicePermisosClient();

        
        //private Seguridad()
        //{
        //    this.objetos = new DBClass.Objetos(DBHelper.AdmonSQL.DataBase.Security);
        //}

        public static Permisos Instance
        {
            get
            {
                return instance;
            }
        }

        //public void SecurityAgentPage(ref Page pagina, int idPerfil, int idObjetoPadre)
        //{
        //    DataSet ds = this.objetos.Consulta(idPerfil, idObjetoPadre);
        //    this.SecurityAgentPageDo(ref pagina, ref ds);
        //}

        public void SecurityAgentPage(ref Page pagina, int idPerfil, String rutaApp)
        {
            InterfacesServicesPermisos.PermisoObjeto[] list = this.objetos.Consulta(idPerfil, rutaApp);
            this.SecurityAgentPageDo(ref pagina, ref list);
        }

        //public void SecurityAgentUC(ref UserControl uc, int idPerfil, int idObjetoPadre)
        //{
        //    DataSet ds = this.objetos.Consulta(idPerfil, idObjetoPadre);
        //    this.SecurityAgentUCDo(ref uc, ref ds);
        //}

        //public void SecurityAgentUC(ref UserControl uc, int idPerfil, String rutaApp)
        //{
        //    //DataSet ds = this.objetos.Consulta(idPerfil, rutaApp);
        //    //this.SecurityAgentUCDo(ref uc, ref ds);
        //}

        private void SecurityAgentPageDo(ref Page ctrlOrigen, ref InterfacesServicesPermisos.PermisoObjeto[] ds)
        {
            //DataView dv = new DataView(ds);
            Label lblScript = (Label)ctrlOrigen.FindControl("lblScript");
            String nombreObjeto = "";
            String objeto1 = "";
            String objeto2 = "";
            String gridName = "";
            String tabControl = "";
            int index = 0;
            int columna = 0;
            bool visible = false;

            if (lblScript != null)
            {
                lblScript.Text = "<script type='text/javascript'>";
            }
            foreach (InterfacesServicesPermisos.PermisoObjeto row in ds)
            {
                nombreObjeto = row.vchNombreObjeto.ToString();
                index = nombreObjeto.IndexOf(":");
                visible = Convert.ToBoolean(row.bObjetoVisible);
                switch (Convert.ToInt32(row.sintObjetoPadre))
                {
                    case 1: // Menu Items
                        if (index == -1)
                        {
                            if (lblScript != null)
                            {
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + nombreObjeto + "')";
                            }
                        }
                        else
                        {
                            objeto1 = nombreObjeto.Substring(index + 2);
                            objeto2 = nombreObjeto.Substring(0, index);
                            if (lblScript != null)
                            {
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto1 + "')";
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto2 + "')";
                            }
                        }
                        break;
                    case 2: // Grid Columns
                        columna = Convert.ToInt32(nombreObjeto.Substring(index + 1));
                        gridName = nombreObjeto.Substring(0, index);
                        if (ctrlOrigen.FindControl(gridName) != null)
                        {
                            //DataGrid dg = (DataGrid)ctrlOrigen.FindControl(gridName);
                            //dg.Columns[columna].Visible = visible;
                            GridView gdv = (GridView)ctrlOrigen.FindControl(gridName);
                            gdv.Columns[columna].Visible = visible;
                        }
                        break;
                    case 3: // Button
                        if (ctrlOrigen.FindControl(nombreObjeto) != null)
                        {
                            Button btn = (Button)ctrlOrigen.FindControl(nombreObjeto);
                            btn.Visible = visible;
                        }
                        break;
                    case 4: // TextBox
                        if (ctrlOrigen.FindControl(nombreObjeto) != null)
                        {
                            TextBox txt = (TextBox)ctrlOrigen.FindControl(nombreObjeto);
                            txt.Enabled = visible;
                        }
                        break;
                    case 5: // DownList
                        if (ctrlOrigen.FindControl(nombreObjeto) != null)
                        {
                            DropDownList ddl = (DropDownList)ctrlOrigen.FindControl(nombreObjeto);
                            ddl.Enabled = visible;
                        }
                        break;
                    case 6: // CheckBox
                        if (ctrlOrigen.FindControl(nombreObjeto) != null)
                        {
                            CheckBox chk = (CheckBox)ctrlOrigen.FindControl(nombreObjeto);
                            chk.Enabled = visible;
                        }
                        break;
                    case 7: // Table Row o Table Cell
                        if (index == -1)
                        {
                            if (lblScript != null)
                            {
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + nombreObjeto + "')";
                            }
                        }
                        else
                        {
                            objeto1 = nombreObjeto.Substring(index + 2);
                            objeto2 = nombreObjeto.Substring(0, index);
                            if (lblScript != null)
                            {
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto1 + "')";
                                lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto2 + "')";
                            }
                        }
                        break;
                    case 8: // TabStrip Control
                        columna = Convert.ToInt32(nombreObjeto.Substring(index + 2));
                        tabControl = nombreObjeto.Substring(0, index);
                        if (ctrlOrigen.FindControl(tabControl) != null)
                        {
                            Object tabCtrl = (Object)ctrlOrigen.FindControl(tabControl);

                            //for (int i=0, len = tabCtrl.i
                        }
                        break;

                    case 28: // ImageButton
                        if (ctrlOrigen.FindControl(nombreObjeto) != null)
                        {
                            ImageButton imgButton = (ImageButton)ctrlOrigen.FindControl(nombreObjeto);
                            imgButton.Visible = visible;
                        }
                        break;


                }
            }

            if (lblScript != null)
            {
                lblScript.Text += "</script>";
            }
            //dv.Dispose();
            //ds.Dispose();
        }

        //private void SecurityAgentUCDo(ref UserControl ctrlOrigen, ref DataSet ds)
        //{
        //    DataView dv = new DataView(ds.Tables[0]);
        //    Label lblScript = (Label)ctrlOrigen.FindControl("lblScript");
        //    String nombreObjeto = "";
        //    String objeto1 = "";
        //    String objeto2 = "";
        //    String gridName = "";
        //    String tabControl = "";
        //    int index = 0;
        //    int columna = 0;
        //    bool visible = false;

        //    if (lblScript != null)
        //    {
        //        lblScript.Text = "<script type='text/javascript'>";
        //    }
        //    foreach (DataRowView row in dv)
        //    {
        //        nombreObjeto = row["vchNombreObjeto"].ToString();
        //        index = nombreObjeto.IndexOf(":");
        //        visible = Convert.ToBoolean(row["bObjetoVisible"]);
        //        switch (Convert.ToInt32(row["sintTipoObjeto"]))
        //        {
        //            case 1: // Menu Items
        //                if (index == -1)
        //                {
        //                    if (lblScript != null)
        //                    {
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + nombreObjeto + "')";
        //                    }
        //                }
        //                else
        //                {
        //                    objeto1 = nombreObjeto.Substring(index + 2);
        //                    objeto2 = nombreObjeto.Substring(0, index);
        //                    if (lblScript != null)
        //                    {
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto1 + "')";
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto2 + "')";
        //                    }
        //                }
        //                break;
        //            case 2: // Grid Columns
        //                columna = Convert.ToInt32(nombreObjeto.Substring(index + 2));
        //                gridName = nombreObjeto.Substring(0, index);
        //                if (ctrlOrigen.FindControl(gridName) != null)
        //                {
        //                    DataGrid dg = (DataGrid)ctrlOrigen.FindControl(gridName);
        //                    dg.Columns[columna].Visible = visible;
        //                }
        //                break;
        //            case 3: // Button
        //                if (ctrlOrigen.FindControl(nombreObjeto) != null)
        //                {
        //                    Button btn = (Button)ctrlOrigen.FindControl(nombreObjeto);
        //                    btn.Visible = visible;
        //                }
        //                break;
        //            case 4: // TextBox
        //                if (ctrlOrigen.FindControl(nombreObjeto) != null)
        //                {
        //                    TextBox txt = (TextBox)ctrlOrigen.FindControl(nombreObjeto);
        //                    txt.Enabled = visible;
        //                }
        //                break;
        //            case 5: // DownList
        //                if (ctrlOrigen.FindControl(nombreObjeto) != null)
        //                {
        //                    DropDownList ddl = (DropDownList)ctrlOrigen.FindControl(nombreObjeto);
        //                    ddl.Enabled = visible;
        //                }
        //                break;
        //            case 6: // CheckBox
        //                if (ctrlOrigen.FindControl(nombreObjeto) != null)
        //                {
        //                    CheckBox chk = (CheckBox)ctrlOrigen.FindControl(nombreObjeto);
        //                    chk.Enabled = visible;
        //                }
        //                break;
        //            case 7: // Table Row o Table Cell
        //                if (index == -1)
        //                {
        //                    if (lblScript != null)
        //                    {
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + nombreObjeto + "')";
        //                    }
        //                }
        //                else
        //                {
        //                    objeto1 = nombreObjeto.Substring(index + 2);
        //                    objeto2 = nombreObjeto.Substring(0, index);
        //                    if (lblScript != null)
        //                    {
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto1 + "')";
        //                        lblScript.Text += (visible ? "Muestra" : "Oculta") + "('" + objeto2 + "')";
        //                    }
        //                }
        //                break;
        //            case 8: // TabStrip Control
        //                columna = Convert.ToInt32(nombreObjeto.Substring(index + 2));
        //                tabControl = nombreObjeto.Substring(0, index);
        //                if (ctrlOrigen.FindControl(tabControl) != null)
        //                {
        //                    Object tabCtrl = (Object)ctrlOrigen.FindControl(tabControl);

        //                    //for (int i=0, len = tabCtrl.i
        //                }
        //                break;
        //        }
        //    }

        //    if (lblScript != null)
        //    {
        //        lblScript.Text = "</script>";
        //    }
        //    dv.Dispose();
        //    ds.Dispose();
        //}

    }
}