import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';

// SnackBar 工具
class SnackBarUtil {
  checkIsSnackBarInit() {
    return Get.overlayContext != null;
  }

  Future<void> error(String? title, {dynamic error}) async {
    if (checkIsSnackBarInit()) {
      if (error is Exception) {
        title = error.toString();
      }

      if (error is DioException) {
        title = error.message;
        if (error.response?.data is Map) {
          title = error.response?.data['message'] ?? title;
        }
      }
      if (Get.isSnackbarOpen) {
        await Get.closeCurrentSnackbar();
      }
      Get.rawSnackbar(
          snackPosition: SnackPosition.TOP,
          backgroundColor: AppTheme.snackbarErrorBackgroudColor,
          borderRadius: ScreenAdaper.sp(15),
          messageText: Text(
            '$title',
            style: TextStyle(
                fontSize: ScreenAdaper.sp(25), color: AppTheme.nearlyWhite),
          ),
          margin: EdgeInsets.symmetric(
              horizontal: ScreenAdaper.width(20), vertical: 0),
          overlayColor: Colors.white,
          duration: const Duration(seconds: 3),
          forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
          reverseAnimationCurve: Curves.linearToEaseOut);
    }
  }

  Future<void> success(String title, {String? message}) async {
    if (checkIsSnackBarInit()) {
      if (Get.isSnackbarOpen) {
        await Get.closeCurrentSnackbar();
      }
      Get.rawSnackbar(
          message: title,
          snackPosition: SnackPosition.TOP,
          backgroundColor: AppTheme.snackbarSuccessBackgroudColor,
          borderRadius: 15,
          margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
          overlayColor: Colors.white,
          duration: Duration(seconds: 2),
          dismissDirection: DismissDirection.horizontal,
          forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
          reverseAnimationCurve: Curves.linearToEaseOut);
    }
  }

  Future<void> info(String title, {String? message}) async {
    if (checkIsSnackBarInit()) {
      if (Get.isSnackbarOpen) {
        await Get.closeCurrentSnackbar();
      }
      Get.rawSnackbar(
          message: title,
          snackPosition: SnackPosition.TOP,
          borderRadius: 15,
          margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
          duration: Duration(seconds: 2),
          dismissDirection: DismissDirection.horizontal,
          forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
          reverseAnimationCurve: Curves.linearToEaseOut);
    }
  }

  Future<void> warning(String title, {String? message}) async {
    if (checkIsSnackBarInit()) {
      if (Get.isSnackbarOpen) {
        await Get.closeCurrentSnackbar();
      }
      Get.rawSnackbar(
          message: title,
          snackPosition: SnackPosition.TOP,
          backgroundColor: AppTheme.snackbarWarningBackgroudColor,
          borderRadius: 15,
          margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
          overlayColor: Colors.white,
          duration: Duration(seconds: 2),
          dismissDirection: DismissDirection.horizontal,
          forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
          reverseAnimationCurve: Curves.linearToEaseOut);
    }
  }
}
