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

class LoadingUtil extends GetxService {
  static LoadingUtil get to => Get.find();
  OverlayEntry? _loadingOverlay;

  Future<LoadingUtil> init() async {
    return this;
  }

  Future<void> show({String? status}) async {
    return showLoading(status: status);
  }

  Future<void> dismiss() async {
    return hideLoading();
  }

  showLoading({String? status}) async {
    hideLoading();

    _loadingOverlay = OverlayEntry(
      builder: (BuildContext context) {
        return WillPopScope(
            onWillPop: () async => false,
            child: Stack(
              children: <Widget>[
                ModalBarrier(dismissible: false, color: AppTheme.barrierColor),
                Center(
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      LoadingAnimationWidget.fourRotatingDots(
                        color: AppTheme.primaryColor,
                        size: ScreenAdaper.sp(50),
                      ),
                      if (status != null)
                        SizedBox(width: ScreenAdaper.width(20)),
                      if (status != null)
                        Text(status,
                            style: TextStyle(
                                color: AppTheme.primaryColor,
                                fontSize: ScreenAdaper.sp(20)))
                    ],
                  ),
                )
              ],
            ));
      },
    );
    if (Get.overlayContext != null) {
      Overlay.of(Get.overlayContext!).insert(_loadingOverlay!);
    }
  }

  hideLoading() {
    _loadingOverlay?.remove();
    _loadingOverlay = null;
  }
}
