Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Navigation
Imports ApNegociosSL.LoginUI

''' <summary>
''' Clase <see cref="UserControl"/> que proporciona la IU principal de la aplicación.
''' </summary>
Partial Public Class MainPage
    Inherits UserControl

    ''' <summary>
    ''' Crea una nueva instancia de <see cref="MainPage"/>.
    ''' </summary>
    Public Sub New()
        InitializeComponent()
    End Sub

    ''' <summary>
    ''' Una vez que la clase base Frame navegue, asegúrese de que esté seleccionado el <see cref="HyperlinkButton"/> que representa la página actual
    ''' </summary>
    Private Sub ContentFrame_Navigated(ByVal sender As Object, ByVal e As NavigationEventArgs)
        For Each child As UIElement In LinksStackPanel.Children
            Dim hb As HyperlinkButton = TryCast(child, HyperlinkButton)
            If hb IsNot Nothing AndAlso hb.NavigateUri IsNot Nothing Then
                If hb.NavigateUri.ToString().Equals(e.Uri.ToString()) Then
                    VisualStateManager.GoToState(hb, "ActiveLink", True)
                Else
                    VisualStateManager.GoToState(hb, "InactiveLink", True)
                End If
            End If
        Next
    End Sub

    ''' <summary>
    ''' Si se produce un error durante la navegación, mostrar una ventana de error
    ''' </summary>
    Private Sub ContentFrame_NavigationFailed(ByVal sender As Object, ByVal e As NavigationFailedEventArgs)
        e.Handled = True
        ErrorWindow.CreateNew(e.Exception)
    End Sub

  Private Sub ContentFrame_Navigating(sender As Object, e As NavigatingCancelEventArgs)
    ' Páginas Home y About
    If e.Uri.OriginalString = "/Home" OrElse
       e.Uri.OriginalString = "/About" Then
      Return
    End If ' continuar
    ' Resto de páginas: Mostrar, Agregar y Borrar
    If Not WebContext.Current.User.IsAuthenticated Then
      AccesoDenegado(e)
      ' Si está autenticado tiene acceso a Mostrar. Ahora:
    ElseIf e.Uri.OriginalString <> "/Mostrar" AndAlso
           WebContext.Current.User.IsInRole("Registered Users") Then
      AccesoDenegado(e)
    Else
      ' "miembros" o "administradores"
      ' Ambos pueden Agregar, pero Borrar sólo los administradores
      If e.Uri.OriginalString = "/Borrar" AndAlso
         Not WebContext.Current.User.IsInRole("administradores") Then
        AccesoDenegado(e)
      End If
    End If
  End Sub

  Private Sub AccesoDenegado(e As NavigatingCancelEventArgs)
    Dim window As New ErrorWindow("Acceso denegado", "No está autorizado para acceder a esta página")
    window.Show()
    e.Cancel = True
  End Sub
End Class