import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';

class ToastUtil {
  /// 普通灰色背景提示（仅文字）
  static void showNormal(BuildContext context, String message, {
    ToastGravity gravity = ToastGravity.BOTTOM,
    int duration = 2,
  }) {
    _showToast(
      context: context,
      message: message,
      gravity: gravity,
      duration: duration,
    );
  }

  /// 成功提示（带图标）
  static void showSuccess(BuildContext context, String message, {
    ToastGravity gravity = ToastGravity.CENTER,
    int duration = 3,
  }) {
    _showToast(
      context: context,
      message: message,
      gravity: gravity,
      duration: duration,
      isSuccess: true,
    );
  }

  /// 失败提示（带图标）
  static void showError(BuildContext context, String message, {
    ToastGravity gravity = ToastGravity.CENTER,
    int duration = 4,
  }) {
    _showToast(
      context: context,
      message: message,
      gravity: gravity,
      duration: duration,
      isError: true,
    );
  }

  /// 内部通用方法
  static void _showToast({
    required BuildContext context,
    required String message,
    required ToastGravity gravity,
    required int duration,
    bool isSuccess = false,
    bool isError = false,
  }) {
    // 如果有图标（成功或失败），则使用自定义 Widget
    if (isSuccess || isError) {
      final fToast = FToast();
      fToast.init(context);
      fToast.showToast(
        child: _buildIconToast(message, isSuccess: isSuccess),
        gravity: gravity,
        toastDuration: Duration(seconds: duration),
      );
    }
    // 普通文字提示
    else {
      Fluttertoast.showToast(
        msg: message,
        toastLength: duration > 2 ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT,
        gravity: gravity,
        backgroundColor: Colors.grey[500],
        textColor: Colors.white,
        fontSize: 16.0,
      );
    }
  }

  /// 构建带图标的 Toast Widget
  static Widget _buildIconToast(String message, {bool isSuccess = true}) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 16.0),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(25.0),
        color: Colors.grey[850]?.withOpacity(0.9),
      ),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(
            isSuccess ? Icons.check : Icons.error_outline,
            color: isSuccess ? Colors.greenAccent[400] : Colors.redAccent[400],
            size: 36.0,
          ),
          const SizedBox(height: 8.0),
          Text(
            message,
            style: const TextStyle(
              color: Colors.white,
              fontSize: 16.0,
            ),
            textAlign: TextAlign.center,
          ),
        ],
      ),
    );
  }
}