import 'package:flutter/services.dart';

class ConfirmationIdFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
    TextEditingValue oldValue,
    TextEditingValue newValue,
  ) {
    // Extract only digits from the input
    String digitsOnly = newValue.text.replaceAll(RegExp(r'[^\d]'), '');

    // Limit to 10 digits maximum
    if (digitsOnly.length > 9) {
      digitsOnly = digitsOnly.substring(0, 9);
    }

    // Build the formatted string: add dash after 9 digits
    String formatted = '';
    if (digitsOnly.length > 8) {
      formatted = '${digitsOnly.substring(0, 8)}-${digitsOnly.substring(8)}';
    } else if (digitsOnly.length == 8) {
      formatted = '$digitsOnly-';
    } else {
      formatted = digitsOnly;
    }

    // Calculate cursor position
    int cursorPosition = formatted.length;
    if (newValue.text.length < oldValue.text.length) {
      // When deleting, maintain cursor position relative to digits
      cursorPosition = formatted.length;
    } else {
      // When adding, place cursor after the last digit
      if (digitsOnly.length == 8) {
        cursorPosition = formatted.length; // After the dash
      } else if (digitsOnly.length > 8) {
        cursorPosition = formatted.length; // After the last digit
      } else {
        cursorPosition = digitsOnly.length;
      }
    }

    return TextEditingValue(
      text: formatted,
      selection: TextSelection.collapsed(offset: cursorPosition),
    );
  }
}