@using Indotalent.ConfigBackEnd.Extensions
@using Indotalent.Features.Inventory.Scrapping
@using Indotalent.Features.Inventory.Scrapping.Cqrs
@using MudBlazor
@using Indotalent.Features.Root.Shared
@inject ScrappingService ScrappingService
@inject IDialogService DialogService
@inject ISnackbar Snackbar

<MudPaper Elevation="0" Outlined="true" Style="border-radius: 12px; border: 1px solid #E5E7EB;">
    <div style="padding: 16px; border-bottom: 1px solid #E5E7EB; display: flex; justify-content: space-between; align-items: center; background-color: #F9FAFB;">
        <MudText Typo="Typo.button" Style="font-weight: 600;">Scrapping Items</MudText>
        @if (!ReadOnly)
        {
            <MudButton Variant="Variant.Filled" Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add" OnClick="OnAddClick" Size="Size.Small" Style="text-transform: none; font-weight: 500; border-radius: 6px;">
                Add Item
            </MudButton>
        }
    </div>

    <MudTable Striped="true" Class="mud-table-styled" Items="Items" Hover="true" Elevation="0" Dense="true" T="ScrappingItemResponse">
        <HeaderContent>
            <MudTh Style="font-weight: 700; color: #111827;">Product</MudTh>
            <MudTh Style="font-weight: 700; color: #111827; text-align: right;">Quantity</MudTh>
            @if (!ReadOnly)
            {
                <MudTh Style="width: 100px; text-align: right; font-weight: 700;">Actions</MudTh>
            }
        </HeaderContent>
        <RowTemplate>
            <MudTd DataLabel="Product" Style="padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6B7280; font-size: 0.875rem;">@context.ProductName</MudTd>
            <MudTd DataLabel="Quantity" Style="text-align: right; font-weight: 700;">@context.Movement?.ToString("N2")</MudTd>
            @if (!ReadOnly)
            {
                <MudTd Style="text-align: right; padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6B7280; font-size: 0.875rem;">
                    <MudIconButton Icon="@Icons.Material.Filled.Edit" Size="Size.Small" Color="Color.Primary" OnClick="@(() => OnEditClick(context))" />
                    <MudIconButton Icon="@Icons.Material.Filled.Delete" Size="Size.Small" Color="Color.Error" OnClick="@(() => OnDeleteClick(context))" />
                </MudTd>
            }
        </RowTemplate>
    </MudTable>
</MudPaper>


<style>
    .mud-table-styled .mud-table-row:hover { background-color: #F9FAFB !important; }
</style>

@code {
    [Parameter] public string ScrappingId { get; set; } = string.Empty;
    [Parameter] public List<ScrappingItemResponse> Items { get; set; } = new();
    [Parameter] public bool ReadOnly { get; set; } = false;
    [Parameter] public EventCallback OnChanged { get; set; }

    private async Task OnAddClick()
    {
        var parameters = new DialogParameters { ["ScrappingId"] = ScrappingId };
        var options = new DialogOptions { MaxWidth = MaxWidth.Small, FullWidth = true, CloseButton = true };
        var dialog = await DialogService.ShowAsync<_ScrappingItemCreateForm>("Add Scrapping Item", parameters, options);
        var result = await dialog.Result;
        if (result != null && !result.Canceled) await OnChanged.InvokeAsync();
    }

    private async Task OnEditClick(ScrappingItemResponse item)
    {
        var parameters = new DialogParameters { ["Data"] = item };
        var options = new DialogOptions { MaxWidth = MaxWidth.Small, FullWidth = true, CloseButton = true };
        var dialog = await DialogService.ShowAsync<_ScrappingItemUpdateForm>("Edit Scrapping Item", parameters, options);
        var result = await dialog.Result;
        if (result != null && !result.Canceled) await OnChanged.InvokeAsync();
    }

    private async Task OnDeleteClick(ScrappingItemResponse item)
    {
        var parameters = new DialogParameters { ["ContentText"] = $"Are you sure you want to remove this item?" };
        var dialog = await DialogService.ShowAsync<_DeleteConfirmation>("Delete Confirmation", parameters, new DialogOptions { MaxWidth = MaxWidth.ExtraSmall, FullWidth = true });
        var result = await dialog.Result;
        if (result != null && !result.Canceled)
        {
            var success = await ScrappingService.DeleteScrappingItemAsync(item.Id!);
            if (success)
            {
                Snackbar.Add("Removed successfully", Severity.Success);
                await OnChanged.InvokeAsync();
            }
        }
    }
}