@using salesbook.Shared.Components.SingleElements
@inject NavigationManager NavigationManager

<ErrorBoundary @ref="ErrorBoundary">
    <ChildContent>
        <CascadingAuthenticationState>
            <Router AppAssembly="@typeof(Routes).Assembly">
                <Found Context="routeData">
                    <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(Layout.MainLayout)">
                        <Authorizing>
                            <p>Authorizing page</p>
                        </Authorizing>
                        <NotAuthorized>
                            @if (context.User.Identity?.IsAuthenticated != true)
                            {
                                NavigationManager.NavigateTo("/login");
                            }
                            else
                            {
                                <p role="alert">You are not authorized to access this resource.</p>
                            }
                        </NotAuthorized>
                    </AuthorizeRouteView>
                    <FocusOnNavigate RouteData="@routeData" Selector="h1"/>
                </Found>
                <NotFound>
                    <PageTitle>Not found</PageTitle>
                    <LayoutView>
                        <p role="alert">Sorry, there's nothing at this address.</p>
                    </LayoutView>
                </NotFound>
            </Router>
        </CascadingAuthenticationState>
    </ChildContent>

    <ErrorContent>
        <ExceptionModal @ref="ExceptionModal"
                        Exception="@context"
                        ErrorBoundary="@ErrorBoundary"
                        OnRetry="() => ErrorBoundary?.Recover()"/>
    </ErrorContent>
</ErrorBoundary>

@code {

    private ErrorBoundary? ErrorBoundary { get; set; }
    private ExceptionModal ExceptionModal { get; set; }
}