import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:tanami_app/features/deleteAccount/presentation/bloc/delete_account_event.dart';
import 'package:tanami_app/features/deleteAccount/presentation/bloc/delete_account_state.dart';

class DeleteAccountBloc extends Bloc<DeleteAccountEvent, DeleteAccountState> {
  final GlobalKey<FormState> formKey = GlobalKey<FormState>();
  final TextEditingController descriptionTextField = TextEditingController();

  GlobalKey<FormState> getFormKey() {
    return formKey;
  }

  DeleteAccountBloc() : super(DeleteAccountInitial()) {
    descriptionTextField.addListener(_onFormFieldChanged);

    on<DeleteAccountFormChanged>(_onLoginFormChanged);
    on<DeleteAccountSubmitted>((event, emit) async {
      if (!formKey.currentState!.validate()) {
        return;
      }
      emit(DeleteAccountLoading());
      try {
        // Simulate API call
        await Future.delayed(const Duration(seconds: 2));
        // Replace the next line with actual API call
        final isSuccess = _mockApiCheck();
        if (isSuccess) {
          emit(DeleteAccountSuccess());
        } else {
          emit(const DeleteAccountFailure("Failed."));
        }
      } catch (e) {
        emit(DeleteAccountFailure(e.toString()));
      }
    });
  }

  bool _mockApiCheck() {
    return true;
  }

  void _onFormFieldChanged() {
    add(DeleteAccountFormChanged(
      descriptionTextField.text,
    ));
  }

  void _onLoginFormChanged(
      DeleteAccountFormChanged event, Emitter<DeleteAccountState> emit) {
    final areFieldsFilled = event.description.isNotEmpty;
    emit(DeleteAccountFieldsState(areFieldsFilled));
  }

  // Method to reset text fields
  void resetFields() {
    descriptionTextField.clear();
  }

  @override
  Future<void> close() {
    descriptionTextField.dispose();
    return super.close();
  }
}
