@page "/inventur/starten"
@using Blazor.IndexedDB
@using ScannerPilot.Data
@using Inv = ScannerPilot.Data.Inventur

@inject IIndexedDbFactory DbFactory

<h3>InventurStarten</h3>
<div class="mb-3">
    
    <button class="btn btn-secondary ms-2" @onclick="Reload">Neu laden</button>
    <button class="btn btn-danger ms-2" @onclick="ForceRefresh">Alles löschen</button>
    
</div>

<input @ref="scanInputRef"
       class="form-control"
       placeholder="EAN hier scannen..."
       @bind="scanInput"
       @onfocus="OnInputFocus"
       @onkeydown="HandleKeyDown"
       autofocus />

@if (!string.IsNullOrEmpty(bezeichnung))
{
    <p><strong>Artikel:</strong> @bezeichnung @nettogewicht g</p>
}

@code {
    private List<Inv>? inventurliste;
    private string scanInput = string.Empty;
    private string? bezeichnung;
    private string? nettogewicht;
    private ElementReference scanInputRef;

    protected override async Task OnInitializedAsync() => await Reload();

    // Wenn das Feld den Fokus bekommt
    private void OnInputFocus(FocusEventArgs e)
    {
        bezeichnung = null; // Reset
        nettogewicht = null; // Reset
    }

    // Wenn der Scanner Enter schickt
    private async Task HandleKeyDown(KeyboardEventArgs e)
    { 
        if (e.Key == "Enter" || e.Key == "Tab" || e.Key == "NumpadEnter" && !string.IsNullOrWhiteSpace(scanInput))
        {
            using var db = await DbFactory.Create<ScannerPilotDB>();

            var artikel = db.ArtikelListe.FirstOrDefault(a => a.Barcode == scanInput);

            if (artikel is not null)
            {
                bezeichnung = artikel.Bezeichnung;
                nettogewicht = artikel.NettoGewicht.ToString();
            }
            else
            {
                bezeichnung = $"Kein Artikel für EAN {scanInput} gefunden.";
            }

            // Eingabefeld zurücksetzen & sofort wieder Fokus geben
            scanInput = string.Empty;
        }
    }

    private async Task Reload()
    {
        using var db = await DbFactory.Create<ScannerPilotDB>();
        inventurliste = db.InventurListe.ToList();
        StateHasChanged();
    }
    private async Task ForceRefresh()
    {
        using var db = await DbFactory.Create<ScannerPilotDB>();
        db.InventurListe.Clear();
        await db.SaveChanges();
        await Reload();
    }
}