import 'package:freezed_annotation/freezed_annotation.dart';

import 'loading_error.dart';

part 'loadable_state.freezed.dart';

@freezed
class LoadableState<TState> with _$LoadableState {
  const LoadableState._();

  const factory LoadableState({
    required bool isLoading,
    required TState? data,
    required int? lastFetch,
    required void Function()? reFetch,
    required LoadingError? error,
  }) = _LoadableState;

  bool _hasError() => error != null;
  bool _hasData() => data != null;

  bool showPrimaryLoading() => isLoading && !_hasData();
  bool showBackgroundLoading() => isLoading && _hasData();
  bool showErrorBar() => _hasError() && _hasData();
  bool showError() => _hasError() && !_hasData();
  bool showContent() => _hasData();
}