import 'package:flutter/material.dart';

import 'package:pweb/models/state/visibility.dart';


class BalanceRefreshButton extends StatelessWidget {
  final bool isBusy;
  final bool enabled;
  final VoidCallback onPressed;
  final VisibilityState iconOnly;
  final String label;
  final String tooltip;
  final double iconSize;

  const BalanceRefreshButton({
    super.key,
    required this.isBusy,
    required this.enabled,
    required this.onPressed,
    required this.iconOnly,
    required this.label,
    required this.tooltip,
    this.iconSize = 18,
  });

  @override
  Widget build(BuildContext context) {
    final canPress = enabled && !isBusy;

    if (iconOnly == VisibilityState.hidden) {
      return IconButton(
        tooltip: tooltip,
        onPressed: canPress ? onPressed : null,
        icon: isBusy
            ? SizedBox(
                width: iconSize,
                height: iconSize,
                child: const CircularProgressIndicator(strokeWidth: 2),
              )
            : const Icon(Icons.refresh),
      );
    }

    return TextButton.icon(
      onPressed: canPress ? onPressed : null,
      icon: isBusy
          ? SizedBox(
              width: iconSize,
              height: iconSize,
              child: const CircularProgressIndicator(strokeWidth: 2),
            )
          : const Icon(Icons.refresh),
      label: Text(label),
      style: TextButton.styleFrom(visualDensity: VisualDensity.compact),
    );
  }
}
