@page "/pipeline/expense"
@using Indotalent.Features.Pipeline.Expense
@using Indotalent.Features.Pipeline.Expense.Cqrs
@using Indotalent.Features.Pipeline.Expense.Components
@using MudBlazor

@if (_currentView == ViewMode.Create)
{
    <_ExpenseCreateForm OnCancel="BackToTable" OnSuccess="HandleSuccess" />
}
else if (_currentView == ViewMode.Update || _currentView == ViewMode.View)
{
    <_ExpenseUpdateForm Data="_selectedData!" ReadOnly="@(_currentView == ViewMode.View)" OnCancel="BackToTable" OnSuccess="HandleSuccess" />
}
else
{
    <_ExpenseDataTable 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 UpdateExpenseRequest? _selectedData;

    private void ShowCreate() => _currentView = ViewMode.Create;
    private void ShowUpdate(UpdateExpenseRequest 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; }
}