import 'package:flutter/material.dart';

enum MultiState { loading, empty, error, success, offline }

/// 多状态视图（对应 Android MultiStatePage）
class MultiStateView extends StatelessWidget {
  final MultiState state;
  final Widget? child;
  final String? emptyText;
  final String? errorText;
  final VoidCallback? onRetry;
  final Widget? loadingWidget;

  const MultiStateView({
    super.key,
    required this.state,
    this.child,
    this.emptyText,
    this.errorText,
    this.onRetry,
    this.loadingWidget,
  });

  @override
  Widget build(BuildContext context) {
    switch (state) {
      case MultiState.loading:
        return loadingWidget ??
            const Center(child: CircularProgressIndicator(strokeWidth: 2));
      case MultiState.empty:
        return _Empty(text: emptyText ?? '暂无数据', onRetry: onRetry);
      case MultiState.error:
        return _Empty(
          text: errorText ?? '加载失败，点击重试',
          icon: Icons.error_outline,
          onRetry: onRetry,
        );
      case MultiState.offline:
        return _Empty(
          text: '当前无网络，请检查后重试',
          icon: Icons.wifi_off,
          onRetry: onRetry,
        );
      case MultiState.success:
        return child ?? const SizedBox.shrink();
    }
  }
}

class _Empty extends StatelessWidget {
  final String text;
  final IconData? icon;
  final VoidCallback? onRetry;

  const _Empty({required this.text, this.icon, this.onRetry});

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(icon ?? Icons.inbox_outlined,
              size: 64, color: Colors.grey.shade400),
          const SizedBox(height: 12),
          Text(text, style: TextStyle(color: Colors.grey.shade600)),
          if (onRetry != null) ...[
            const SizedBox(height: 16),
            OutlinedButton(onPressed: onRetry, child: const Text('重试')),
          ],
        ],
      ),
    );
  }
}