@page "/admin/faqs/create"
@page "/admin/faqs/{Id:int}/edit"
@attribute [Authorize]
@using TaxBaik.Web.Services
@using TaxBaik.Domain.Entities
@inject IFaqBrowserClient FaqClient
@inject NavigationManager Navigation
@inject ISnackbar Snackbar

<PageTitle>@(Id.HasValue ? "FAQ 수정" : "FAQ 등록")</PageTitle>

<section class="admin-page-hero">
    <div>
        <MudText Typo="Typo.caption" Class="admin-eyebrow">홈페이지</MudText>
        <MudText Typo="Typo.h4" Class="admin-page-title">@(Id.HasValue ? "FAQ 수정" : "FAQ 등록")</MudText>
    </div>
    <MudButton Variant="Variant.Outlined" Href="/taxbaik/admin/faqs"
               StartIcon="@Icons.Material.Filled.ArrowBack">목록으로</MudButton>
</section>

<AdminEditorPanel Loading="@isLoading" SkeletonContent="@FaqSkeleton">
    <MudPaper Class="admin-surface" Elevation="0" Style="max-width:720px;">
        <MudForm @ref="form" @bind-IsValid="isValid">
            <MudGrid Spacing="3">
                <MudItem xs="12">
                    <MudTextField @bind-Value="faq.Question"
                                  Label="질문 *" Required="true"
                                  RequiredError="질문을 입력하세요."
                                  Counter="300" MaxLength="300"
                                  Lines="2" AutoGrow="true"
                                  Placeholder="예: 기장료가 얼마인지 미리 알 수 있나요?" />
                </MudItem>
                <MudItem xs="12">
                    <MudTextField @bind-Value="faq.Answer"
                                  Label="답변 *" Required="true"
                                  RequiredError="답변을 입력하세요."
                                  Lines="5" AutoGrow="true"
                                  Placeholder="방문자에게 보여질 답변을 입력하세요." />
                </MudItem>
                <MudItem xs="12" md="6">
                    <CommonCodeSelect @bind-Value="faq.Category" Group="FAQ_CATEGORY" Label="카테고리" Clearable="true" Placeholder="전체" />
                </MudItem>
                <MudItem xs="12" md="3">
                    <MudNumericField @bind-Value="faq.SortOrder"
                                     Label="정렬 순서"
                                     HelperText="작을수록 위에 노출"
                                     Min="0" Max="9999" />
                </MudItem>
                <MudItem xs="12" md="3" Class="d-flex align-center">
                    <MudSwitch T="bool" @bind-Value="faq.IsActive" Color="Color.Success"
                               Label="@(faq.IsActive ? "노출 중" : "비활성")" />
                </MudItem>

                <MudItem xs="12" Class="d-flex gap-2 mt-2">
                    <MudButton Variant="Variant.Filled" Color="Color.Primary"
                               StartIcon="@Icons.Material.Filled.Save"
                               OnClick="@SaveAsync" Disabled="@isSaving">
                        @(isSaving ? "저장 중..." : "저장")
                    </MudButton>
                    <MudButton Variant="Variant.Outlined" Href="/taxbaik/admin/faqs">
                        취소
                    </MudButton>
                </MudItem>
            </MudGrid>
        </MudForm>
    </MudPaper>
</AdminEditorPanel>

@code {
    [Parameter] public int? Id { get; set; }

    private MudForm form = null!;
    private Faq faq = new() { SortOrder = 10, IsActive = true };
    private bool isValid;
    private bool isLoading = true;
    private bool isSaving;

    private RenderFragment FaqSkeleton => builder =>
    {
        builder.OpenComponent<AdminSkeletonRows>(0);
        builder.AddAttribute(1, "Rows", 5);
        builder.AddAttribute(2, "Columns", 3);
        builder.CloseComponent();
    };

    protected override async Task OnInitializedAsync()
    {
        if (Id.HasValue)
        {
            try
            {
                var existing = await FaqClient.GetByIdAsync(Id.Value);
                if (existing is null)
                {
                    Snackbar.Add("FAQ를 찾을 수 없습니다.", Severity.Error);
                    Navigation.NavigateTo("/taxbaik/admin/faqs");
                    return;
                }
                faq = existing;
            }
            catch (Exception ex)
            {
                Snackbar.Add($"오류: {ex.Message}", Severity.Error);
                Navigation.NavigateTo("/taxbaik/admin/faqs");
                return;
            }
        }
        isLoading = false;
    }

    private async Task SaveAsync()
    {
        await form.Validate();
        if (!isValid) return;

        isSaving = true;
        try
        {
            if (Id.HasValue)
            {
                var result = await FaqClient.UpdateAsync(Id.Value, faq);
                if (result != null)
                    Snackbar.Add("FAQ가 수정되었습니다.", Severity.Success);
                else
                    Snackbar.Add("수정 실패", Severity.Error);
            }
            else
            {
                var result = await FaqClient.CreateAsync(faq);
                if (result != null)
                    Snackbar.Add("FAQ가 등록되었습니다.", Severity.Success);
                else
                    Snackbar.Add("등록 실패", Severity.Error);
            }
            Navigation.NavigateTo("/taxbaik/admin/faqs");
        }
        catch (Exception ex)
        {
            Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error);
        }
        finally
        {
            isSaving = false;
        }
    }
}
