@page "/inventory/unit-measure"
@using Indotalent.Features.Inventory.UnitMeasure
@using Indotalent.Features.Inventory.UnitMeasure.Cqrs
@using Indotalent.Features.Inventory.UnitMeasure.Components
@using MudBlazor

@if (_currentView == ViewMode.Create)
{
    <_UnitMeasureCreateForm OnCancel="BackToTable"
                            OnSuccess="HandleSuccess" />
}
else if (_currentView == ViewMode.Update || _currentView == ViewMode.View)
{
    <_UnitMeasureUpdateForm Data="_selectedData!"
                            ReadOnly="@(_currentView == ViewMode.View)"
                            OnCancel="BackToTable"
                            OnSuccess="HandleSuccess" />
}
else
{
    <_UnitMeasureDataTable OnAdd="() => ShowCreate()"
                           OnEdit="(item) => ShowUpdate(item, false)"
                           OnView="(item) => ShowUpdate(item, true)" />
}

@code {
    private enum ViewMode { Table, Create, Update, View }
    private ViewMode _currentView = ViewMode.Table;
    private UpdateUnitMeasureRequest? _selectedData;

    private void ShowCreate()
    {
        _currentView = ViewMode.Create;
    }

    private void ShowUpdate(UpdateUnitMeasureRequest data, bool isReadOnly)
    {
        _selectedData = data;
        _currentView = isReadOnly ? ViewMode.View : ViewMode.Update;
    }

    private void BackToTable()
    {
        _currentView = ViewMode.Table;
        _selectedData = null;
    }

    private void HandleSuccess()
    {
        _currentView = ViewMode.Table;
        _selectedData = null;
    }
}