import 'package:get/get.dart';
import 'package:flutter/material.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../permission/biometric_manager.dart';

// login_state_enum.dart
enum LoginState {
  idle,
  typing,
  done,
  error,
}

class LoginViewModel extends RestfulApiViewModel {
  final BiometricManager _biometricManager = BiometricManager();

  var loginState = LoginState.idle.obs;
  var isPasswordVisible = false.obs;
  var password = "".obs;

  // Giả lập userName và phoneNumber
  final userName = "Phạm Duy Đức".obs;
  final phoneNumber = "0987654321".obs;

  // Loại sinh trắc học mà thiết bị hỗ trợ
  var biometricType = BiometricTypeEnum.none.obs;

  @override
  void onInit() {
    super.onInit();
    _initBiometric();
  }

  Future<void> _initBiometric() async {
    final type = await _biometricManager.checkDeviceBiometric();
    biometricType.value = type;
  }

  // Kiểm tra thiết bị có cho phép check biometrics không
  Future<bool> canUseBiometrics() async {
    return _biometricManager.canCheckBiometrics();
  }

  void onPasswordChanged(String value) {
    password.value = value;
    if (value.isEmpty) {
      loginState.value = LoginState.idle;
    } else {
      loginState.value = LoginState.typing;
    }
  }

  void togglePasswordVisibility() {
    isPasswordVisible.value = !isPasswordVisible.value;
  }

  void onLoginPressed() {
    if (password.value.isEmpty) return;

    // Ví dụ: Mật khẩu chuẩn là "123456"
    if (password.value == "123456") {
      loginState.value = LoginState.done;
      debugPrint("Đăng nhập thành công!");
      // TODO: Chuyển màn hình
    } else {
      loginState.value = LoginState.error;
      debugPrint("Sai mật khẩu!");
    }
  }

  void onChangePhonePressed() {
    debugPrint("Người dùng chọn Đổi số điện thoại");
    // TODO: Logic đổi SĐT hoặc chuyển sang màn hình khác
  }

  void onForgotPassPressed() {
    debugPrint("Người dùng chọn Quên mật khẩu?");
    // TODO: Logic quên mật khẩu, ví dụ chuyển sang màn hình recovery
  }

  /// Xác thực đăng nhập bằng sinh trắc
  Future<void> onBiometricLoginPressed(BuildContext context) async {
    // Kiểm tra thiết bị hỗ trợ
    final canUse = await canUseBiometrics();
    if (!canUse || biometricType.value == BiometricTypeEnum.none) {
      Get.snackbar("Thông báo", "Thiết bị không hỗ trợ sinh trắc học",
          snackPosition: SnackPosition.BOTTOM);
      return;
    }

    // Tuỳ chọn: hiển thị dialog xác nhận trước khi gọi authenticate
    final success = await _biometricManager.showCustomBiometricDialog(
      context,
      title: "Xác thực sinh trắc học",
      content: (biometricType.value == BiometricTypeEnum.faceId)
          ? "Bạn có muốn đăng nhập bằng Face ID không?"
          : "Bạn có muốn đăng nhập bằng vân tay không?",
      confirmText: "Đồng ý",
      cancelText: "Huỷ",
    );

    if (success) {
      loginState.value = LoginState.done;
      debugPrint("Đăng nhập bằng sinh trắc thành công!");
      // TODO: Chuyển màn hình
    } else {
      debugPrint("Xác thực thất bại hoặc người dùng huỷ.");
    }
  }
}
