Imports System.Net
Imports System.Net.Security
Imports WebIntranet.Models

Public Class Menu
    Inherits System.Web.UI.Page
    Public sessionUsuario As String
    Public usuariosSeleccionados As List(Of String)
    Public idGrupo As Integer
    Public listaGruposInci As List(Of grupos)
    Public listaGruposSoli As List(Of grupos)
    Public listaGruposGene As List(Of grupos)
    Public idSubgrupo As String
    Public subgrupos As List(Of subGrupos)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Session("usuario") = "" Then
            Response.Redirect("default.aspx")
        End If
        sessionUsuario = Session("usuario")
        idGrupo = Request.QueryString("g")
        Dim tipo = Request.QueryString("t")
        idSubgrupo = Request.QueryString("sg")

        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
        Dim url3 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/GruposIncidenciasControlHorario"
        Dim credenciales3 As New Net.CredentialCache()
        Dim clienteHTTP3 As New Net.WebClient()
        clienteHTTP3.Encoding = System.Text.Encoding.UTF8
        clienteHTTP3.Credentials = credenciales3
        Dim respuesta3 As String = clienteHTTP3.DownloadString(url3)
        Dim deserializador3 As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
        settings.CheckAdditionalContent = True
        Dim Datos As List(Of Models.grupos) =
        deserializador3.Deserialize(Of List(Of Models.grupos))(respuesta3)

        listaGruposInci = Datos.Where(Function(x) x.NumIncidencias <> 0).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Descripcion).ToList
        listaGruposSoli = Datos.Where(Function(x) x.NumSolicitudes <> 0).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Descripcion).ToList
        listaGruposGene = Datos.OrderBy(Function(x) x.orden AndAlso (x.NumIncidencias <> 0 OrElse x.NumSolicitudes <> 0)).ThenBy(Function(x) x.Descripcion).ToList


        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
        Dim url2 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/SubGruposIncidenciasControlHorario?idGrupo=" + idGrupo.ToString
        Dim credenciales2 As New Net.CredentialCache()
        Dim clienteHTTP2 As New Net.WebClient()
        clienteHTTP2.Encoding = System.Text.Encoding.UTF8
        clienteHTTP2.Credentials = credenciales2
        Dim respuesta2 As String = clienteHTTP3.DownloadString(url2)
        Dim deserializador2 As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim settings2 As New Newtonsoft.Json.JsonSerializerSettings()
        settings.CheckAdditionalContent = True
        Dim Datos2 As ResultadoSubGruposIncidenciasControlHorario =
        deserializador2.Deserialize(Of ResultadoSubGruposIncidenciasControlHorario)(respuesta2)
        subgrupos = Datos2.listaSubgrupos
        subgrupos = If(tipo = "p", subgrupos.Where(Function(x) x.numSol <> 0).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.descripcion).ToList, subgrupos.Where(Function(x) x.numCom <> 0).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.descripcion).ToList)
        cargarBarraLateral(tipo)
        cargarMenu(tipo)
    End Sub
    Public Sub cargarBarraLateral(tipo As String)
        Dim lista
        If tipo = "p" Then
            lista = listaGruposSoli
        ElseIf tipo = "i" Then
            lista = listaGruposInci
        ElseIf tipo Is Nothing OrElse tipo = "" Then
            lista = listaGruposGene
        End If
        Dim html = ""
        html += "<ul>"
        For Each grupo As grupos In lista
            If grupo.idGrupo = idGrupo Then
                html += "<li id=""" + grupo.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat listActivo""><a onclick=""redirigir()"" href=""/Menu.aspx?g=" + grupo.idGrupo.ToString + "&t=" + tipo + """>" + grupo.Descripcion + "</a></li>"
            Else
                html += "<li id=""" + grupo.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat""><a onclick=""redirigir()"" href=""/Menu.aspx?g=" + grupo.idGrupo.ToString + "&t=" + tipo + """>" + grupo.Descripcion + "</a></li>"
            End If
        Next
        html += "</ul>"
        navLateral.InnerHtml = html
    End Sub
    Public Sub cargarMenu(tipo As String)
        Dim usuario As String = "tecnosis"
        Dim contraseña As String = "patata2022"
        Dim url3 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/IncidenciasControlHorario"
        ' Dim url3 As String = "http://192.168.41.14:81/api/IncidenciasControlHorario"
        Dim credenciales3 As New Net.CredentialCache()
        credenciales3.Add(New Uri(url3), "Basic", New Net.NetworkCredential(usuario, contraseña))
        Dim clienteHTTP3 As New Net.WebClient()
        clienteHTTP3.Encoding = System.Text.Encoding.UTF8
        clienteHTTP3.Credentials = credenciales3
        Dim respuesta3 As String = clienteHTTP3.DownloadString(url3)
        Dim deserializador3 As New System.Web.Script.Serialization.JavaScriptSerializer()
        deserializador3.MaxJsonLength = Integer.MaxValue
        Dim listaPicada As List(Of Incidencia) =
            deserializador3.Deserialize(Of List(Of Incidencia))(respuesta3)
        Dim ListIncidenciasNoReloj = listaPicada.Where(Function(x) x.EsInciReloj = False).OrderBy(Function(x) x.Descripcion).ToList
        Dim lista As List(Of Incidencia)
        Dim htmlMigas = ""
        'Dim htmlTituloMob = ""
        Dim descrip
        Dim sec
        Dim titulo
        If tipo = "p" Then
            sec = "Permisos"
            descrip = listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
            lista = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = True AndAlso x.idGrupo IsNot "" AndAlso x.idGrupo = idGrupo AndAlso x.visibleWeb = True).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Nombre).ToList
            htmlMigas += "<ul>" +
                   "<li class='migaActiva'>/ Permisos</li>" +
                  "<li class='migaActiva'>/ " + listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion + "</li>" +
                  "</ul>"
            titulo = listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
        ElseIf tipo = "i" Then
            sec = "Incidencias"
            descrip = listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
            lista = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = False AndAlso x.idGrupo IsNot "" AndAlso x.idGrupo = idGrupo AndAlso x.visibleWeb = True).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Nombre).ToList
            htmlMigas += "<ul>" +
                  "<li class='migaActiva'>/ Comunicaciones</li>" +
                 "<li class='migaActiva'>/ " + listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion + "</li>" +
                 "</ul>"
            titulo = listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
        ElseIf tipo Is Nothing OrElse tipo = "" Then
            sec = "Incidencias y comunicaciones"
            descrip = listaGruposGene.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
            lista = ListIncidenciasNoReloj.Where(Function(x) x.idGrupo IsNot "" AndAlso x.idGrupo = idGrupo AndAlso x.visibleWeb = True).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Nombre).ToList
            htmlMigas += "<ul>" +
                  "<li class='migaActiva'>/ Solicitudes y comunicaciones</li>" +
                 "<li class='migaActiva'>/ " + listaGruposGene.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion + "</li>" +
                 "</ul>"
            titulo = listaGruposGene.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
        End If
        Dim htmlSubgrupos = ""
        If subgrupos.Count > 0 Then
            For Each subgrp As subGrupos In subgrupos
                Dim listainciSubgrupo = lista.Where(Function(x) x.idSubgrupo IsNot "" AndAlso x.idSubgrupo = subgrp.idSubGrupo)
                If listainciSubgrupo.All(Function(x) x.visibleWeb <> False) = True Then
                    htmlSubgrupos += "<div Class=""card tooltip2"">" +
                    If(subgrp.ayudaWeb IsNot Nothing, "<span class=""tooltipText"" id=""tooltip" + subgrp.idSubGrupo.ToString + """>" + subgrp.ayudaWeb + "</span>", "") +
                 "<div Class=""card-header""  onmouseover=""mostrarTooltip(" + subgrp.idSubGrupo.ToString + "s)"" onmouseout=""ocultarTooltip(" + subgrp.idSubGrupo.ToString + ")"" id=""headingS" + subgrp.idSubGrupo.ToString + """ data-toggle=""collapse"" data-target=""#collapseS" + subgrp.idSubGrupo.ToString + """ aria-expanded=""" + If(subgrp.idSubGrupo.ToString = idSubgrupo, "true", "false") + """ aria-controls=""collapseS" + subgrp.idSubGrupo.ToString + """>" +
                 "<h5 Class=""mb-0"">" +
                 "<input type=""button"" value=""+ " + If(tipo = "p", listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion, listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion) + " - " + subgrp.descripcion.ToString + """ Class=""CardSubgrupo"" >" +
                 "</input>" +
                 "</h5>" +
                 "</div>" +
                 "<div id=""collapseS" + subgrp.idSubGrupo.ToString + """ class=""collapse " + If(subgrp.idSubGrupo.ToString = idSubgrupo, "show", "") + """ aria-labelledby=""headingS" + subgrp.idSubGrupo.ToString + """ data-parent=""#accordion"">" +
                     "<div class=""card-body"">" +
                     "<ul class='mb-0 ListaMenu'>"
                    For Each itemSub As Incidencia In listainciSubgrupo.OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Nombre)
                        htmlSubgrupos += "<li  onmouseover=""mostrarTooltip(" + itemSub.idIncidencias.ToString + ")"" onmouseout=""ocultarTooltip(" + itemSub.idIncidencias.ToString + ")"" class=""tooltip2"">" + If(itemSub.ayudaWeb IsNot Nothing, "<span  class=""tooltipText"" id=""tooltip" + itemSub.idIncidencias.ToString + """>" + itemSub.ayudaWeb + "</span>", "") + "<a onclick="" redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + itemSub.idIncidencias + "&t=" + tipo + """>" + itemSub.Nombre.Replace("""", "") + "</a></li>"
                    Next
                    htmlSubgrupos += "</ul>" +
                                    "</div>" +
                                    "</div>" +
                                    "</div>"
                End If
            Next
        End If
        Dim html = ""

        'Dim listaSinSG = lista.Where(Function(x) x.idSubgrupo = "")
        ''SERGIO:El agu me dijo que tenian que salir ordenados por campo orden
        Dim listaSinSG = lista.Where(Function(x) x.idSubgrupo = "").OrderBy(Function(x) x.orden)
        If listaSinSG.Count > 0 Then
            html += "<div Class=""card"">" +
                 "<div Class=""card-header"" id=""heading" + idGrupo.ToString + """ data-toggle=""collapse"" data-target=""#collapse" + idGrupo.ToString + """ aria-expanded=""" + If(idSubgrupo IsNot Nothing, "false", "true") + """ aria-controls=""collapse" + idGrupo.ToString + """>" +
                 "<h5 Class=""mb-0"">" +
                 "<input type=""button"" value=""+ " + If(tipo = "p", listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion, listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion) + " - General"" Class=""CardSubgrupo"" >" +
                 "</input>" +
                 "</h5>" +
                 "</div>" +
                 "<div id=""collapse" + idGrupo.ToString + """ class=""collapse " + If(idSubgrupo IsNot Nothing, "", "show") + """ aria-labelledby=""heading" + idGrupo.ToString + """ data-parent=""#accordion"">" +
                     "<div class=""card-body"">" +
                     "<ul class='mb-0 ListaMenu'>"
            For Each item As Incidencia In listaSinSG.OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Nombre)
                html += "<li onmouseover=""mostrarTooltip(" + item.idIncidencias.ToString + ")"" onmouseout=""ocultarTooltip(" + item.idIncidencias.ToString + ")"" class=""tooltip2"">" + If(item.ayudaWeb IsNot Nothing, "<span class=""tooltipText"" id=""tooltip" + item.idIncidencias.ToString + """>" + item.ayudaWeb + "</span>", "") + "<a onclick="" redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + item.idIncidencias + "&t=" + tipo + """>" + item.Nombre.Replace("""", "") + "</a></li>"
            Next
            html += "</ul>" +
                "</div>" +
                "</div>" +
                "</div>"
        End If
        migasDePan.InnerHtml = htmlMigas
        'tituloMenu.InnerText = titulo

        listMenu.InnerHtml = "<div id=""accordion"">" + html + htmlSubgrupos + "</div></div>"
        tituloMob.InnerText = titulo
    End Sub
End Class