using Koogle.Application.DTOs;
namespace Koogle.Web.Store.DayState;
// Load Days Actions
///
/// Action to load all days for the current club.
///
public record LoadDaysAction(DayFilterDto? Filter = null);
///
/// Action dispatched when days are loaded successfully.
///
public record LoadDaysSuccessAction(IReadOnlyList Days);
///
/// Action dispatched when loading days fails.
///
public record LoadDaysFailureAction(string Error);
// Load Day Details Actions
///
/// Action to load a single day with full details.
///
public record LoadDayDetailsAction(Guid DayId);
///
/// Action dispatched when day details are loaded successfully.
///
public record LoadDayDetailsSuccessAction(DayDto Day);
///
/// Action dispatched when loading day details fails.
///
public record LoadDayDetailsFailureAction(string Error);
// Create Day Actions
///
/// Action to create a new day.
///
public record CreateDayAction(CreateDayDto Dto);
///
/// Action dispatched when day is created successfully.
///
public record CreateDaySuccessAction(DayDto Day);
///
/// Action dispatched when creating day fails.
///
public record CreateDayFailureAction(string Error);
// Update Day Actions
///
/// Action to update an existing day.
///
public record UpdateDayAction(UpdateDayDto Dto);
///
/// Action dispatched when day is updated successfully.
///
public record UpdateDaySuccessAction(DayDto Day);
///
/// Action dispatched when updating day fails.
///
public record UpdateDayFailureAction(string Error);
// Delete Day Actions
///
/// Action to delete a day.
///
public record DeleteDayAction(Guid Id);
///
/// Action dispatched when day is deleted successfully.
///
public record DeleteDaySuccessAction(Guid Id);
///
/// Action dispatched when deleting day fails.
///
public record DeleteDayFailureAction(string Error);
// Participant Actions
///
/// Action to add a participant to a day.
///
public record AddDayParticipantAction(AddDayParticipantDto Dto);
///
/// Action dispatched when participant is added successfully.
///
public record AddDayParticipantSuccessAction(DayDto Day);
///
/// Action dispatched when adding participant fails.
///
public record AddDayParticipantFailureAction(string Error);
///
/// Action to remove a participant from a day.
///
public record RemoveDayParticipantAction(RemoveDayParticipantDto Dto);
///
/// Action dispatched when participant is removed successfully.
///
public record RemoveDayParticipantSuccessAction(DayDto Day);
///
/// Action dispatched when removing participant fails.
///
public record RemoveDayParticipantFailureAction(string Error);
// Status Actions
///
/// Action to advance day status (New → Started → Closed).
///
public record AdvanceDayStatusAction(Guid DayId);
///
/// Action dispatched when status is advanced successfully.
///
public record AdvanceDayStatusSuccessAction(DayDto Day);
///
/// Action dispatched when advancing status fails.
///
public record AdvanceDayStatusFailureAction(string Error);
// Available Persons Actions
///
/// Action to load available persons for participant selection.
///
public record LoadAvailablePersonsAction;
///
/// Action dispatched when available persons are loaded successfully.
///
public record LoadAvailablePersonsSuccessAction(IReadOnlyList Persons);
///
/// Action dispatched when loading available persons fails.
///
public record LoadAvailablePersonsFailureAction(string Error);
// Selection and Error Actions
///
/// Action to select a day for editing.
///
public record SelectDayAction(DayDto? Day);
///
/// Action to clear day error state.
///
public record ClearDayErrorAction;
///
/// Action to set filter for day list.
///
public record SetDayFilterAction(DayFilterDto? Filter);
// PersonExpense Actions
///
/// Action to load person expenses for a day.
///
public record LoadDayExpensesAction(Guid DayId);
///
/// Action dispatched when day expenses are loaded successfully.
///
public record LoadDayExpensesSuccessAction(IReadOnlyList Expenses);
///
/// Action dispatched when loading day expenses fails.
///
public record LoadDayExpensesFailureAction(string Error);
///
/// Action to load available expense templates.
///
public record LoadAvailableExpensesAction;
///
/// Action dispatched when available expenses are loaded successfully.
///
public record LoadAvailableExpensesSuccessAction(IReadOnlyList Expenses);
///
/// Action dispatched when loading available expenses fails.
///
public record LoadAvailableExpensesFailureAction(string Error);
///
/// Action to create a new person expense.
///
public record CreatePersonExpenseAction(CreatePersonExpenseDto Dto);
///
/// Action dispatched when person expense is created successfully.
///
public record CreatePersonExpenseSuccessAction(PersonExpenseDto Expense);
///
/// Action dispatched when creating person expense fails.
///
public record CreatePersonExpenseFailureAction(string Error);
///
/// Action to create an inverse person expense (charged to all except one).
///
public record CreateInversePersonExpenseAction(CreateInversePersonExpenseDto Dto);
///
/// Action dispatched when inverse expenses are created successfully.
///
public record CreateInversePersonExpenseSuccessAction(IReadOnlyList Expenses);
///
/// Action dispatched when creating inverse expense fails.
///
public record CreateInversePersonExpenseFailureAction(string Error);
///
/// Action to delete a person expense.
///
public record DeletePersonExpenseAction(Guid Id, Guid DayId);
///
/// Action dispatched when person expense is deleted successfully.
///
public record DeletePersonExpenseSuccessAction(Guid Id);
///
/// Action dispatched when deleting person expense fails.
///
public record DeletePersonExpenseFailureAction(string Error);
///
/// Action to update person expense status (Open/Done).
///
public record UpdatePersonExpenseStatusAction(UpdatePersonExpenseStatusDto Dto);
///
/// Action dispatched when person expense status is updated successfully.
///
public record UpdatePersonExpenseStatusSuccessAction(PersonExpenseDto Expense);
///
/// Action dispatched when updating person expense status fails.
///
public record UpdatePersonExpenseStatusFailureAction(string Error);
///
/// Action dispatched when trigger-based expenses are created (e.g., Gutter, Strike).
///
public record TriggerExpensesCreatedAction(IReadOnlyList Expenses);