using BackOffice.Services.Content;
using BackOffice.Pages.Content.Components;
using Microsoft.AspNetCore.Components;
using MudBlazor;

namespace BackOffice.Pages.Content;

public partial class SitePageManagementPage
{
    private List<SitePageSummaryDto> _pages = new();
    private bool _loading = true;

    protected override async Task OnInitializedAsync()
    {
        await LoadPagesAsync();
    }

    private async Task LoadPagesAsync()
    {
        _loading = true;
        _pages = await SitePageService.GetAllAsync();
        _loading = false;
    }

    private async Task CreatePage()
    {
        var model = new SitePageCreateDto();
        var parameters = new DialogParameters<SitePageCreateDialog>
        {
            { nameof(SitePageCreateDialog.Model), model }
        };

        var dialog = await DialogService.ShowAsync<SitePageCreateDialog>("افزودن صفحه جدید", parameters,
            new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true });

        var result = await dialog.Result;
        if (!result.Canceled)
        {
            Snackbar.Add("صفحه جدید با موفقیت ایجاد شد", Severity.Success);
            await LoadPagesAsync();
        }
    }

    private async Task EditPage(SitePageSummaryDto item)
    {
        var details = await SitePageService.GetByIdAsync(item.Id);
        if (details == null)
        {
            Snackbar.Add("خطا در دریافت اطلاعات صفحه", Severity.Error);
            return;
        }

        var dto = new SitePageEditDto
        {
            Title = details.Title,
            MetaDescription = details.MetaDescription,
            HeroTitle = details.HeroTitle,
            HeroSubtitle = details.HeroSubtitle,
            HeroImagePath = details.HeroImagePath,
            IsActive = details.IsActive
        };

        var parameters = new DialogParameters<SitePageEditDialog>
        {
            { nameof(SitePageEditDialog.Model), dto },
            { nameof(SitePageEditDialog.PageId), item.Id }
        };

        var dialog = await DialogService.ShowAsync<SitePageEditDialog>("ویرایش صفحه", parameters,
            new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true });

        var result = await dialog.Result;
        if (!result.Canceled)
        {
            Snackbar.Add("صفحه با موفقیت به‌روزرسانی شد", Severity.Success);
            await LoadPagesAsync();
        }
    }

    private async Task ManageSections(SitePageSummaryDto item)
    {
        var details = await SitePageService.GetByIdAsync(item.Id);
        if (details == null)
        {
            Snackbar.Add("خطا در دریافت اطلاعات صفحه", Severity.Error);
            return;
        }

        var parameters = new DialogParameters<SitePageSectionsDialog>
        {
            { nameof(SitePageSectionsDialog.PageId), item.Id },
            { nameof(SitePageSectionsDialog.PageTitle), item.Title },
            { nameof(SitePageSectionsDialog.Sections), details.Sections }
        };

        var dialog = await DialogService.ShowAsync<SitePageSectionsDialog>(
            $"مدیریت بخش‌های «{item.Title}»", parameters,
            new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Large, FullWidth = true });

        var result = await dialog.Result;
        if (!result.Canceled)
        {
            await LoadPagesAsync();
        }
    }

    private async Task DeletePage(SitePageSummaryDto item)
    {
        var confirm = await DialogService.ShowMessageBox(
            "تایید حذف",
            $"آیا از حذف صفحه «{item.Title}» اطمینان دارید؟ بخش‌های وابسته نیز حذف خواهند شد.",
            yesText: "بله، حذف شود",
            cancelText: "انصراف");

        if (confirm != true) return;

        try
        {
            await SitePageService.DeleteAsync(item.Id);
            Snackbar.Add("صفحه با موفقیت حذف شد", Severity.Success);
            await LoadPagesAsync();
        }
        catch (Exception ex)
        {
            Snackbar.Add($"خطا در حذف: {ex.Message}", Severity.Error);
        }
    }
}
