import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../Globalwidgets/textwidget.dart';
import '../../Helper/Constants/Colorconstants.dart';

class ConnectivityController extends GetxController {
  final isOffline = false.obs;
  final Connectivity _connectivity = Connectivity();
  late StreamSubscription<List<ConnectivityResult>> _subscription;
  bool _wasOffline = false;

  @override
  void onInit() {
    super.onInit();
    _checkInitialConnection();
    _subscription = _connectivity.onConnectivityChanged.listen(_updateStatus);
  }

  Future<void> _checkInitialConnection() async {
    final result = await _connectivity.checkConnectivity();
    _updateStatus([result.first]);
  }

  void _updateStatus(List<ConnectivityResult> results) {
    final isCurrentlyOffline = !results.any((r) => r == ConnectivityResult.mobile || r == ConnectivityResult.wifi);

    if (isCurrentlyOffline != isOffline.value) {
      isOffline.value = isCurrentlyOffline;

      final context = Get.context!;

      if (isCurrentlyOffline) {
        ScaffoldMessenger.of(context).showSnackBar(

          SnackBar(
            content: TextWidget(
              color: ColorConstants.secondaryColor,
              text: "You are currently offline",
            ),
            backgroundColor: Theme.of(context).colorScheme.error,
            duration: Duration(days: 1), // Until dismissed or back online
            behavior: SnackBarBehavior.floating,
          ),
        );
      } else {
        if (_wasOffline) {
          ScaffoldMessenger.of(context).clearSnackBars();
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: TextWidget(
                text:  "You are connected to the internet",
                color: ColorConstants.secondaryColor,
              ),
              backgroundColor: Colors.green,
              behavior: SnackBarBehavior.floating,
              duration: const Duration(seconds: 3),
            ),
          );
        }
      }

      _wasOffline = isCurrentlyOffline;
    }
  }


  @override
  void onClose() {
    _subscription.cancel();
    super.onClose();
  }
}