@using CMSMicroservice.Protobuf.Protos.Inventory

<MudDialog>
    <DialogContent>
        <MudForm @ref="_form" @bind-IsValid="_formValid">
            <MudStack Spacing="4">
                <MudAlert Severity="Severity.Info">
                    <MudStack Spacing="1">
                        <MudText>محصول: <strong>@Item.ProductTitle</strong></MudText>
                        <MudText>انبار: <strong>@Item.WarehouseName</strong></MudText>
                    </MudStack>
                </MudAlert>

                <MudNumericField T="int" @bind-Value="_lowStockThreshold"
                                 Label="حد هشدار کم‌موجودی"
                                 Variant="Variant.Outlined"
                                 Required="true"
                                 RequiredError="این فیلد الزامی است"
                                 Min="0"
                                 HelperText="وقتی موجودی کمتر از این عدد شود، هشدار داده می‌شود" />

                <MudNumericField T="int" @bind-Value="_reorderPoint"
                                 Label="نقطه سفارش مجدد"
                                 Variant="Variant.Outlined"
                                 Required="true"
                                 RequiredError="این فیلد الزامی است"
                                 Min="0"
                                 HelperText="وقتی موجودی به این عدد برسد، باید سفارش داده شود" />

                <MudNumericField T="int" @bind-Value="_maxStockLevel"
                                 Label="حداکثر موجودی مجاز"
                                 Variant="Variant.Outlined"
                                 Required="true"
                                 RequiredError="این فیلد الزامی است"
                                 Min="1"
                                 HelperText="حداکثر تعدادی که در انبار نگهداری می‌شود" />

                <MudDivider />

                <MudText Typo="Typo.caption" Color="Color.Secondary">
                    مقادیر فعلی:
                    حد هشدار: @Item.LowStockThreshold |
                    نقطه سفارش: @Item.ReorderPoint |
                    حداکثر: @Item.MaxStockLevel
                </MudText>
            </MudStack>
        </MudForm>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="Cancel">انصراف</MudButton>
        <MudButton Color="Color.Primary"
                   Variant="Variant.Filled"
                   OnClick="Submit"
                   Disabled="@(!_formValid || _isSubmitting)">
            @if (_isSubmitting)
            {
                <MudProgressCircular Size="Size.Small" Indeterminate="true" Class="mr-2" />
            }
            ذخیره تنظیمات
        </MudButton>
    </DialogActions>
</MudDialog>

@code {
    [CascadingParameter] IMudDialogInstance MudDialog { get; set; } = default!;
    [Inject] public InventoryContract.InventoryContractClient InventoryContract { get; set; } = default!;

    [Parameter] public InventoryItemDto Item { get; set; } = default!;

    private MudForm? _form;
    private bool _formValid;
    private bool _isSubmitting;

    private int _lowStockThreshold;
    private int _reorderPoint;
    private int _maxStockLevel;

    protected override void OnInitialized()
    {
        _lowStockThreshold = Item.LowStockThreshold;
        _reorderPoint = Item.ReorderPoint;
        _maxStockLevel = Item.MaxStockLevel;
    }

    private void Cancel() => MudDialog.Cancel();

    private async Task Submit()
    {
        if (_form != null)
        {
            await _form.Validate();
            if (!_formValid) return;
        }

        // Validation
        if (_lowStockThreshold > _reorderPoint)
        {
            Snackbar.Add("حد هشدار نمی‌تواند از نقطه سفارش بیشتر باشد", Severity.Warning);
            return;
        }

        if (_reorderPoint > _maxStockLevel)
        {
            Snackbar.Add("نقطه سفارش نمی‌تواند از حداکثر موجودی بیشتر باشد", Severity.Warning);
            return;
        }

        _isSubmitting = true;
        try
        {
            var request = new UpdateInventorySettingsRequest
            {
                Id = Item.Id,
                LowStockThreshold = _lowStockThreshold,
                ReorderPoint = _reorderPoint,
                MaxStockLevel = _maxStockLevel
            };

            await InventoryContract.UpdateInventorySettingsAsync(request);
            
            Snackbar.Add("تنظیمات با موفقیت ذخیره شد", Severity.Success);
            MudDialog.Close(DialogResult.Ok(true));
        }
        catch (Exception ex)
        {
            Snackbar.Add($"خطا: {ex.Message}", Severity.Error);
        }
        finally
        {
            _isSubmitting = false;
        }
    }
}
