@inject IJSRuntime JsRuntime

@if (Exception != null)

@*
 *                                dbMango
 *
 * Copyright 2025 Deutsche Bank AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *@
{
    <div class="alert alert-danger" role="alert">

        <style>
            .ex-header {
                color: white;
                font-weight: bold;
            }

            .ex-body {
                color: lightgray;
                font-family: monospace;
                white-space: pre;
            }

            .ex-expander {
                color: @Night.blue;
                font-weight: bold;
                cursor: pointer;
            }

            ul {
                margin-bottom: 1px !important;
            }
        </style>

        <div class="ex-header">@Exception.Message</div>
        <div class="ex-expander" @onclick="OnClick">Stack trace</div>
        <div class="@ExpandedClass">
            <FormMarkdown Class="ex-body" Text="@(Exception.ToMarkdown())"/>
            <FormButton Name="" OnClick="OnCopy" Icon="icon-duplicate-document" />
        </div>
    </div>
}

@code {
    [CascadingParameter] public IModalService Modal     { get; set; } = null!;
    [Parameter]          public Exception?    Exception { get; set; }

    private bool   _expanded = false;
    private string ExpandedClass => _expanded ? "" : "hidden";

    private void OnClick()
    {
        _expanded = !_expanded;
        StateHasChanged();
    }

    private async Task OnCopy()
    {
        if (Exception == null )
            return;
        await JsRuntime.InvokeVoidAsync("DashboardUtils.CopyToClipboard", Exception.ToString());
        await ModalDialogUtils.ShowInfoDialog(Modal, "Success", "Copied to the clipboard.");

    }

}
