import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import '../../../appLocalization/language_key.dart';
import '../../../constants/image_constants.dart';
import '../../../controller/base_controller.dart';
import '../../../serverRequest/all_request.dart';
import '../../../customWidget/dialogues/success_dialogue.dart';

class VerifyOtpController extends GetxController {
  final baseController = Get.find<BaseController>();
  RxInt counter = 90.obs;
  Timer? timer;
  StreamController<ErrorAnimationType> errorController = StreamController<ErrorAnimationType>();
  TextEditingController otpTextController = TextEditingController();
  RxBool verifyLoader = false.obs;

  @override
  void onInit() {
    startTimer();
    AllHttpRequest().generateAuth();
    super.onInit();
  }

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

  onClickVerifyHandler(BuildContext context) {
    verifyLoader(true);
    Future.delayed(
        const Duration(seconds: 2),
        () => {
              if (baseController.generatedOtp.value ==
                  otpTextController.value.text)
                {
                  verificationSuccess(
                      context: context,
                      assetName: ImageConstants.verificationSuccess,
                      title: verifySuccessTitle.tr,
                      subtitle: verifySuccessSubTitle.tr)
                }
              else
                {
                  resetLoading(),
                  Fluttertoast.showToast(msg: incorrectOTPError.tr)
                },
            });

    update();
  }

  onClickResendOTP() {
    resetTimer();
    startTimer();
    resetLoading();

    ///During resend otp auth is fetched from state variable and is not regenerated
    AllHttpRequest().sendOtp();
    update();
  }

  startTimer() {
    ///Decrease the counter value up to 0
    timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      if (counter > 0) {
        counter--;
      } else {
        timer.cancel();
      }
      update();
    });
  }

  resetTimer() {
    ///Set counter to 90s
    counter = 90.obs;
  }

  resetLoading() {
    ///Reset Loading and clear otp in pintextfield
    otpTextController.clear();
    verifyLoader(false);
  }
}