using System;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Elfisa.Avalonia.ViewModels;

namespace Elfisa.Avalonia.Views;

public partial class PriceListView : UserControl
{
    // Строка, в которую сейчас набирают количество с клавиатуры (для многозначного ввода).
    private OfferRow? _typingRow;

    public PriceListView()
    {
        AvaloniaXamlLoader.Load(this);
        var grid = this.FindControl<DataGrid>("OffersGrid");
        if (grid != null) grid.KeyDown += OffersGrid_KeyDown;
    }

    // Выделил предложение → набираешь число цифрами (как колонка «Заказ» в старой программе).
    // Backspace — стереть цифру, Enter — добавить в заказ.
    private void OffersGrid_KeyDown(object? sender, KeyEventArgs e)
    {
        if (sender is not DataGrid grid || grid.SelectedItem is not OfferRow row) return;

        var digit = DigitFromKey(e.Key);
        if (digit >= 0)
        {
            if (!ReferenceEquals(_typingRow, row)) { row.OrderQty = 0; _typingRow = row; }
            var next = row.OrderQty * 10 + digit;
            if (next <= 100000) row.OrderQty = next;
            e.Handled = true;
            return;
        }

        switch (e.Key)
        {
            case Key.Back:
                row.OrderQty = Math.Floor(row.OrderQty / 10);
                _typingRow = row;
                e.Handled = true;
                break;
            case Key.Enter:
                (DataContext as PriceListViewModel)?.AddSelectedOffer();
                _typingRow = null;
                e.Handled = true;
                break;
        }
    }

    private static int DigitFromKey(Key k)
    {
        if (k >= Key.D0 && k <= Key.D9) return k - Key.D0;
        if (k >= Key.NumPad0 && k <= Key.NumPad9) return k - Key.NumPad0;
        return -1;
    }
}
