import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class NewPhoneController extends GetxController {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  final newPhoneNo = TextEditingController(text: '');
  final otpCode = TextEditingController(text: '');

  Future<void> updatePhoneNumber(newPhoneNo) async {
    final currentUser = _auth.currentUser;

    if (currentUser?.phoneNumber == newPhoneNo) {
      Get.snackbar(
        'Ya estas registrado',
        'Este es tu numero actual.',
        snackPosition: SnackPosition.BOTTOM,
      );
    } else {
      try {
        final PhoneVerificationCompleted verificationCompleted =
            (PhoneAuthCredential credential) async {
          await currentUser?.updatePhoneNumber(credential);
          Get.snackbar(
            'Número de teléfono actualizado',
            'El número de teléfono se ha actualizado correctamente.',
            snackPosition: SnackPosition.BOTTOM,
          );
        };

        final PhoneVerificationFailed verificationFailed =
            (FirebaseAuthException e) {
          Get.snackbar(
            'Ingresa un numero de telefono valido',
            'verifica que el campo tenga todos los caracteres o intentalo de nuevo ${e}',
            snackPosition: SnackPosition.BOTTOM,
          );
        };

        final PhoneCodeSent codeSent =
            (String verificationId, [int? forceResendingToken]) {
          Get.defaultDialog(
            title: 'Ingrese el código de verificación',
            content: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Column(
                children: [
                  TextField(
                    controller: otpCode,
                    decoration: InputDecoration(
                      labelText: 'Código de verificación',
                    ),
                  ),
                ],
              ),
            ),
            actions: [
              TextButton(
                onPressed: () {
                  Get.back();
                },
                child: Text('Cancelar'),
              ),
              ElevatedButton(
                onPressed: () async {
                  try {
                    final PhoneAuthCredential credential =
                        PhoneAuthProvider.credential(
                      verificationId: verificationId,
                      smsCode: otpCode.text,
                    );
                    await currentUser?.updatePhoneNumber(credential);
                    Get.back();
                    Get.snackbar(
                      'Número de teléfono actualizado',
                      'El número de teléfono se ha actualizado correctamente.',
                      snackPosition: SnackPosition.BOTTOM,
                    );
                  } catch (e) {
                    Get.snackbar(
                      'Numero ya registrado',
                      'El numero de telefono ingresado ya se encuentra registrado',
                      snackPosition: SnackPosition.BOTTOM,
                    );
                  }
                },
                child: Text('Actualizar'),
              ),
            ],
          );
        };

        final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
            (String verificationId) {
          // Aquí puedes hacer algo si se agota el tiempo de espera para ingresar el código de verificación automáticamente.
        };

        await _auth.verifyPhoneNumber(
          phoneNumber: newPhoneNo,
          verificationCompleted: verificationCompleted,
          verificationFailed: verificationFailed,
          codeSent: codeSent,
          codeAutoRetrievalTimeout: codeAutoRetrievalTimeout,
        );
      } catch (e) {
        print('Error actualizando el número de teléfono: $e');
        Get.snackbar(
          'Error actualizando el número de teléfono',
          'Ha ocurrido un error al actualizar el número de teléfono: $e',
          snackPosition: SnackPosition.BOTTOM,
        );
      }
    }
  }
}
