@using FrontOffice.Main.Utilities
@using MudBlazor

<MudDialog>
    <TitleContent>
        <MudStack Row="true" AlignItems="AlignItems.Center" Spacing="2">
            @if (IsForceUpdate)
            {
                <MudIcon Icon="@Icons.Material.Filled.Warning" Color="Color.Warning" Size="Size.Large"/>
                <MudText Typo="Typo.h6" Color="Color.Warning">بروزرسانی اجباری</MudText>
            }
            else
            {
                <MudIcon Icon="@Icons.Material.Filled.NewReleases" Color="Color.Success" Size="Size.Large"/>
                <MudText Typo="Typo.h6">نسخه جدید موجود است 🎉</MudText>
            }
        </MudStack>
    </TitleContent>
    
    <DialogContent>
        <MudStack Spacing="3">
            @* اطلاعات نسخه با انیمیشن *@
            <MudPaper Class="pa-4 rounded-lg" Elevation="0" 
                      Style="">
                <MudGrid Spacing="2">
                    <MudItem xs="6">
                        <MudStack AlignItems="AlignItems.Center" Spacing="1">
                            <MudIcon Icon="@Icons.Material.Outlined.History" Size="Size.Medium" Color="Color.Secondary"/>
                            <MudText Typo="Typo.caption" Color="Color.Secondary">نسخه فعلی</MudText>
                            <MudChip T="string" Size="Size.Small" Variant="Variant.Outlined" Color="Color.Secondary">
                                @(OldVersion ?? "---")
                            </MudChip>
                        </MudStack>
                    </MudItem>
                    <MudItem xs="6">
                        <MudStack AlignItems="AlignItems.Center" Spacing="1">
                            <MudIcon Icon="@Icons.Material.Filled.Verified" Size="Size.Medium" Color="Color.Success"/>
                            <MudText Typo="Typo.caption" Color="Color.Success">نسخه جدید</MudText>
                            <MudChip T="string" Size="Size.Small" Variant="Variant.Filled" Color="Color.Success">
                                @NewVersion
                            </MudChip>
                        </MudStack>
                    </MudItem>
                </MudGrid>
            </MudPaper>
            
            @* پیام آپدیت *@
            @if (!string.IsNullOrWhiteSpace(UpdateMessage))
            {
                <MudAlert Severity="@(IsForceUpdate ? Severity.Warning : Severity.Info)" 
                          Variant="Variant.Text" 
                          Dense="true"
                          Icon="@Icons.Material.Filled.Info"
                          Class="rounded-lg">
                    @UpdateMessage
                </MudAlert>
            }
            
            @* یادداشت‌های انتشار *@
            @if (!string.IsNullOrWhiteSpace(ReleaseNotes))
            {
                <MudStack Spacing="1">
                    <MudStack Row="true" AlignItems="AlignItems.Center" Spacing="1">
                        <MudIcon Icon="@Icons.Material.Filled.Article" Size="Size.Small" Color="Color.Primary"/>
                        <MudText Typo="Typo.subtitle2" Color="Color.Primary">تغییرات این نسخه:</MudText>
                    </MudStack>
                    <MudPaper Class="pa-3 rounded-lg release-notes-content" Elevation="0" 
                              Style="max-height: 220px; overflow-y: auto; background-color: var(--mud-palette-background-grey); border: 1px solid var(--mud-palette-lines-default);">
                        @((MarkupString)ReleaseNotes)
                    </MudPaper>
                </MudStack>
            }
            
            @if (IsForceUpdate)
            {
                <MudAlert Severity="Severity.Error" Variant="Variant.Filled" Dense="true" Class="rounded-lg">
                    <MudStack Row="true" AlignItems="AlignItems.Center" Spacing="1">
                        <MudIcon Icon="@Icons.Material.Filled.Error" Size="Size.Small"/>
                        <MudText Typo="Typo.body2">
                            این بروزرسانی اجباری است و باید انجام شود.
                        </MudText>
                    </MudStack>
                </MudAlert>
            }
        </MudStack>
    </DialogContent>
    
    <DialogActions>
        @if (!IsForceUpdate)
        {
            <MudButton OnClick="OnSkipClicked" 
                       Color="Color.Default" 
                       Variant="Variant.Text"
                       Size="Size.Medium">
                بعداً یادآوری کن
            </MudButton>
        }
        <MudButton OnClick="OnUpdateClicked" 
                   Color="@(IsForceUpdate ? Color.Warning : Color.Success)" 
                   Variant="Variant.Filled"
                   Size="Size.Medium"
                   StartIcon="@(_isUpdating ? null : Icons.Material.Filled.SystemUpdateAlt)"
                   Class="px-6">
            @if (_isUpdating)
            {
                <MudProgressCircular Size="Size.Small" Indeterminate="true" Color="Color.Surface"/>
                <span class="ms-2">در حال بروزرسانی...</span>
            }
            else
            {
                <span>بروزرسانی کن!</span>
            }
        </MudButton>
    </DialogActions>
</MudDialog>

<style>
    .release-notes-content {
        font-size: 0.9rem;
        line-height: 1.8;
    }
    .release-notes-content ul, .release-notes-content ol {
        padding-right: 1.5rem;
        margin: 0.5rem 0;
    }
    .release-notes-content li {
        margin-bottom: 0.3rem;
    }
    .release-notes-content p {
        margin: 0.5rem 0;
    }
</style>

@code {
    [CascadingParameter] 
    private IMudDialogInstance MudDialog { get; set; } = default!;
    
    [Parameter] 
    public string? OldVersion { get; set; }
    
    [Parameter] 
    public string NewVersion { get; set; } = string.Empty;
    
    [Parameter] 
    public string? ReleaseNotes { get; set; }
    
    [Parameter] 
    public string? UpdateMessage { get; set; }
    
    [Parameter] 
    public bool IsForceUpdate { get; set; }
    
    private bool _isUpdating;
    
    private async Task OnUpdateClicked()
    {
        _isUpdating = true;
        StateHasChanged();
        
        // کمی صبر کنیم برای UI
        await Task.Delay(500);
        
        // برگردوندن نتیجه "آپدیت"
        MudDialog.Close(DialogResult.Ok(true));
    }
    
    private void OnSkipClicked()
    {
        // برگردوندن نتیجه "بعداً"
        MudDialog.Close(DialogResult.Ok(false));
    }
}
