import 'package:equatable/equatable.dart'; import '../../models/settlement.dart'; import '../../models/user_balance.dart'; /// Abstract base class for all balance-related states. /// /// This class extends [Equatable] to enable value equality for state comparison. /// All balance states in the application should inherit from this class. abstract class BalanceState extends Equatable { /// Creates a new [BalanceState]. const BalanceState(); @override List get props => []; } /// Initial state of the balance bloc. /// /// This state represents the initial state before any balance /// operations have been performed. class BalanceInitial extends BalanceState {} /// State indicating that a balance operation is in progress. /// /// This state is used to show loading indicators during balance /// calculations, data loading, or settlement operations. class BalanceLoading extends BalanceState {} /// State indicating that group balances have been successfully loaded. /// /// This state contains the calculated balances for all group members /// and the list of settlements needed to balance all debts. class GroupBalancesLoaded extends BalanceState { /// List of user balances showing how much each user owes or is owed. /// /// Positive balances indicate the user is owed money, /// negative balances indicate the user owes money. final List balances; /// List of settlements required to balance all debts in the group. /// /// Each settlement represents a payment that needs to be made /// from one user to another to settle shared expenses. final List settlements; /// Creates a [GroupBalancesLoaded] state with the calculated data. const GroupBalancesLoaded({ required this.balances, required this.settlements, }); @override List get props => [balances, settlements]; } /// State indicating that a balance operation has completed successfully. /// /// This state is used to show success messages after operations like /// marking settlements as completed or refreshing balance calculations. class BalanceOperationSuccess extends BalanceState { /// Success message to display to the user. final String message; /// Creates a [BalanceOperationSuccess] state with the given [message]. const BalanceOperationSuccess(this.message); @override List get props => [message]; } /// State indicating that a balance operation has failed. /// /// This state contains an error message that can be displayed to the user /// when balance operations fail. class BalanceError extends BalanceState { /// The error message describing what went wrong. final String message; /// Creates a [BalanceError] state with the given error [message]. const BalanceError(this.message); @override List get props => [message]; }