import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

/// Utility class untuk memperbaiki masalah keyboard yang tertutup otomatis
class KeyboardFix {
  /// Menerapkan fix untuk masalah keyboard di seluruh aplikasi
  static void applyGlobalFix() {
    // Nonaktifkan plugin keyboard yang mungkin menyebabkan masalah
    SystemChannels.textInput.invokeMethod('TextInput.hide');
    // Delay sebentar untuk memastikan sistem siap
    Future.delayed(const Duration(milliseconds: 100), () {
      // Tidak ada tindakan lain, hanya memberi tahu sistem untuk reset
    });
  }

  /// Membuat TextField yang tidak akan menutup keyboard secara otomatis
  static Widget createFixedTextField({
    required TextEditingController controller,
    FocusNode? focusNode,
    String? labelText,
    String? hintText,
    TextInputType keyboardType = TextInputType.text,
    bool obscureText = false,
    int? maxLines,
    TextInputAction? textInputAction,
    void Function(String)? onSubmitted,
    String? Function(String?)? validator,
    InputDecoration? decoration,
    bool autofocus = false,
  }) {
    return TextFormField(
      controller: controller,
      focusNode: focusNode,
      decoration:
          decoration ??
          InputDecoration(
            labelText: labelText,
            hintText: hintText,
            border: OutlineInputBorder(borderRadius: BorderRadius.circular(8)),
          ),
      keyboardType: keyboardType,
      obscureText: obscureText,
      maxLines: maxLines ?? 1,
      textInputAction: textInputAction,
      onFieldSubmitted: onSubmitted,
      validator: validator,
      autofocus: autofocus,
      // Hindari menutup keyboard saat tap di luar field
      enableInteractiveSelection: true,
    );
  }

  /// Membungkus widget dengan GestureDetector yang tidak akan menutup keyboard
  static Widget wrapWithSafeGesture(Widget child) {
    return GestureDetector(
      onTap: () {
        // Tidak melakukan apa-apa, biarkan sistem yang menangani
      },
      child: child,
    );
  }

  /// Menampilkan bottom sheet dengan cara yang tidak akan menutup keyboard
  static Future<T?> showSafeModalBottomSheet<T>({
    required BuildContext context,
    required Widget Function(BuildContext) builder,
    bool isScrollControlled = true,
    Color? backgroundColor,
    bool? enableDrag,
    bool? isDismissible,
    bool? useSafeArea,
    BoxConstraints? constraints,
  }) {
    // Force reset input method sebelum menampilkan bottom sheet
    SystemChannels.textInput.invokeMethod('TextInput.clearClient');

    return showModalBottomSheet<T>(
      context: context,
      isScrollControlled: isScrollControlled,
      backgroundColor: backgroundColor ?? Colors.transparent,
      enableDrag: enableDrag ?? true,
      isDismissible: isDismissible ?? true,
      useSafeArea: useSafeArea ?? true,
      constraints: constraints,
      builder: builder,
    );
  }
}
