initChatController method

Future<void> initChatController()

Implementation

Future<void> initChatController() async {
  try {
    initScrollControllers();
    initLanguage();
    hasApiError.value = false;

    // Initialize AssistantsController and load assistants after ChatController is ready
    if (Get.isRegistered<AssistantsController>()) {
      final assistantsController = Get.find<AssistantsController>();
      // Only load if assistants list is empty (not already loaded)
      if (assistantsController.assistants.isEmpty) {
        await assistantsController.getAssistants();
      }
      assistants = assistantsController.assistants;
    }

    await getAssistant();
    messageNotifier.setAssistantId(assistant.value?.id ?? "");
    if (assistant.value != null) {
      // Component successfully booted - config received and first remote call succeeded
      _updateBootStatus(BootState.ok);
      if (DeviceService.isTablet) setDefautMessageInputFieldHeight();
      if (hasApiError.value) {
        _updateBootStatus(BootState.error);
        return;
      }
      if (!isAnonymous &&
          pupauConfig?.conversationId != null &&
          pupauConfig?.conversationId?.trim() != "") {
        await loadConversation(pupauConfig?.conversationId ?? "");
      }

      _hasCompletedFirstInit = true;
      _onFirstInitCompleteCallback?.call();
      _onFirstInitCompleteCallback = null;
    } else {
      _updateBootStatus(BootState.error);
    }
  } catch (e) {
    _updateBootStatus(BootState.error);
    PupauEventService.instance.emitPupauEvent(
      PupauEvent(
        type: UpdateConversationType.error,
        payload: {
          "error": "Error initializing chat controller: ${e.toString()}",
        },
      ),
    );
  }
}