@using TaxBaik.Application.Services

<MudForm @ref="form">
    <MudTextField @bind-Value="model.CompanyCode" Label="회사 코드"
        Variant="Variant.Outlined" Class="mb-4" Required="true"
        HelperText="영문/숫자, 최대 50자" />

    <MudTextField @bind-Value="model.CompanyName" Label="회사명"
        Variant="Variant.Outlined" Class="mb-4" Required="true" />

    <MudTextField @bind-Value="model.ContactPerson" Label="담당자명"
        Variant="Variant.Outlined" Class="mb-4" />

    <MudTextField @bind-Value="model.Phone" Label="전화번호"
        Variant="Variant.Outlined" Class="mb-4" />

    <MudTextField @bind-Value="model.Email" Label="이메일"
        Variant="Variant.Outlined" Class="mb-4" InputType="InputType.Email" />

    <MudTextField @bind-Value="model.Memo" Label="메모"
        Variant="Variant.Outlined" Lines="3" Class="mb-4" />

    <MudCheckBox @bind-Checked="model.IsActive" Label="활성" Class="mb-4" />

    <div class="d-flex gap-2">
        <MudButton Variant="Variant.Filled" Color="Color.Primary" @onclick="HandleSubmit">
            @ButtonText
        </MudButton>
        <MudButton Variant="Variant.Outlined" @onclick="OnCancel">취소</MudButton>
    </div>
</MudForm>

@code {
    [Parameter, EditorRequired]
    public string ButtonText { get; set; } = "저장";

    [Parameter]
    public EventCallback<CompanyFormModel> OnSubmit { get; set; }

    [Parameter]
    public EventCallback OnCancel { get; set; }

    [Parameter]
    public CompanyFormModel? InitialData { get; set; }

    private MudForm? form;
    private CompanyFormModel model = new();

    protected override void OnInitialized()
    {
        if (InitialData != null)
        {
            model = new CompanyFormModel
            {
                CompanyCode = InitialData.CompanyCode,
                CompanyName = InitialData.CompanyName,
                ContactPerson = InitialData.ContactPerson,
                Phone = InitialData.Phone,
                Email = InitialData.Email,
                Memo = InitialData.Memo,
                IsActive = InitialData.IsActive
            };
        }
    }

    private async Task HandleSubmit()
    {
        if (form == null)
            return;

        await form.Validate();
        if (!form.IsValid)
            return;

        await OnSubmit.InvokeAsync(model);
    }

    public class CompanyFormModel
    {
        public string CompanyCode { get; set; } = "";
        public string CompanyName { get; set; } = "";
        public string? ContactPerson { get; set; }
        public string? Phone { get; set; }
        public string? Email { get; set; }
        public string? Memo { get; set; }
        public bool IsActive { get; set; } = true;
    }
}
