import type { TurboModule } from 'react-native';
import { TurboModuleRegistry } from 'react-native';

export interface Spec extends TurboModule {
  getConstants(): {
    TYPE_CONNECTED: string;
    EVENT_OPEN_URL: string;
    ARTICLE_LIKED: string;
    TYPE_ENDED: string;
    SUPPORT_CLOSED: string;
    CHATVIEW_OPENED: string;
    PERFORM_CHATACTION: string;
    CHAT_ATTENDED: string;
    LAUNCHER_HORIZONTAL_RIGHT: string;
    EVENT_RESOURCE_CLOSED: string;
    CHAT_MISSED: string;
    OPERATORS_OFFLINE: string;
    ACTION_SOURCE_SDK: string;
    TYPE_CLOSED: string;
    ACTION_SOURCE_APP: string;
    FEEDBACK_RECEIVED: string;
    CHAT_REOPENED: string;
    ARTICLE_OPENED: string;
    CHAT_OPENED: string;
    KNOWLEDGEBASE_EVENT_LISTENER: string;
    TYPE_WAITING: string;
    LAUNCHER_VISIBILITY_MODE_WHEN_ACTIVE_CHAT: string;
    BOT_TRIGGER: string;
    EVENT_NOTIFICATION_CLICKED: string;
    ZSIQ_EVENT_LISTENER: string;
    NOTIFICATION_EVENT_LISTENER: string;
    LAUNCHER_EVENT_LISTENER: string;
    EVENT_HANDLE_URL: string;
    LAUNCHER_VISIBILITY_MODE_ALWAYS: string;
    EVENT_COMPLETE_CHAT_ACTION: string;
    LAUNCHER_VISIBILITY_MODE_NEVER: string;
    VISITOR_IPBLOCKED: string;
    LAUNCHER_VERTICAL_BOTTOM: string;
    SUPPORT_OPENED: string;
    ARTICLE_DISLIKED: string;
    LAUNCHER_MODE_STATIC: string;
    CHAT_UNREAD_COUNT_CHANGED: string;
    CHATVIEW_CLOSED: string;
    OPERATORS_ONLINE: string;
    EVENT_RESOURCE_DISLIKED: string;
    RATING_RECEIVED: string;
    TYPE_OPEN: string;
    TAB_KNOWLEDGE_BASE: string;
    RESOURCE_ARTICLES: string;
    CHAT_EVENT_LISTENER: string;
    TYPE_MISSED: string;
    TAB_CONVERSATIONS: string;
    TAB_FAQ: string;
    LAUNCHER_HORIZONTAL_LEFT: string;
    ARTICLE_CLOSED: string;
    CHAT_CLOSED: string;
    LAUNCHER_MODE_FLOATING: string;
    LAUNCHER_VERTICAL_TOP: string;
    CHAT_QUEUE_POSITION_CHANGED: string;
    EVENT_RESOURCE_LIKED: string;
    CUSTOMTRIGGER: string;
    EVENT_HANDLE_CUSTOM_LAUNCHER_VISIBILITY: string;
    EVENT_RESOURCE_OPENED: string;
    EVENT_VISITOR_REGISTRATION_FAILURE: string;
    RE_REGISTER_PUSH: string;
  };
  fetchAttenderImage(attenderId: string, defaultImage: boolean, imageCallback: () => void): void;
  getChats(listCallback: () => void): void;
  getChatsWithFilter(filter: string, listCallback: () => void): void;
  getDepartments(departmentCallback: () => void): void;
  isMultipleOpenChatRestricted(callback: () => void): void;
  getArticles(articlesCallback: () => void): void;
  getArticlesWithCategoryID(categoryId: string, articlesCallback: () => void): void;
  getCategories(categoryCallback: () => void): void;
  openArticle(id: string, articlesCallback: () => void): void;
  init(appKey: string, accessKey: string): void;
  initWithCallback(appKey: string, accessKey: string, initCallback: () => void): void;
  showLauncher(mode: string): void;
  updateListener(listener: string): void;
  setVisibilityModeToCustomLauncher(mode: string): void;
  enableDragToDismiss(enabled: boolean): void;
  setMinimumPressDuration(duration: number): void;
  setChatTitle(title: string): void;
  hideQueueTime(hide: boolean): void;
  setLanguage(code: string): void;
  setDepartment(department: string): void;
  setDepartments(department: Array<any>): void;
  setOperatorEmail(email: string): void;
  showOperatorImageInChat(visible: boolean): void;
  setFeedbackVisibility(visible: boolean): void;
  setRatingVisibility(visible: boolean): void;
  showOperatorImageInLauncher(show: boolean): void;
  openChat(): void;
  openChatWithID(chatId: string): void;
  showPayloadChat(result: Object): void;
  showOfflineMessage(show: boolean): void;
  endChat(chatId: string): void;
  setLauncherVisibility(visible: boolean): void;
  setVisitorName(name: string): void;
  setVisitorEmail(email: string): void;
  setVisitorContactNumber(number: string): void;
  setVisitorAddInfo(key: string, value: string): void;
  setQuestion(question: string): void;
  startChat(question: string): void;
  setConversationVisibility(visible: boolean): void;
  setConversationListTitle(title: string): void;
  setFAQVisibility(visible: boolean): void;
  registerVisitor(uniqueId: string, callback: () => void): void;
  unregisterVisitor(callback: () => void): void;
  setPageTitle(title: string): void;
  setCustomAction(actionName: string): void;
  performCustomAction(actionName: string, shouldOpenChatWindow: boolean): void;
  enableInAppNotification(): void;
  disableInAppNotification(): void;
  setThemeColorforiOS(colorCode: string): void;
  setThemeColor(theme: Object | null): void;
  setChatComponentVisibility(chatComponentName: string, visibility: boolean): void;
  setVisitorNameVisibility(visibility: boolean): void;
  enablePreChatForms(): void;
  disablePreChatForms(): void;
  enableScreenshotOption(): void;
  disableScreenshotOption(): void;
  registerChatAction(actionName: string): void;
  unregisterChatAction(actionName: string): void;
  unregisterAllChatActions(): void;
  setChatActionTimeout(timeout: number): void;
  completeChatAction(uuid: string): void;
  completeChatActionWithMessage(uuid: string, success: boolean, message: string): void;
  setVisitorLocation(visitorLocation: Object): void;
  syncThemeWithOsForAndroid(sync: boolean): void;
  isChatEnabled(callback: () => void): void;
  getChatUnreadCount(callback: () => void): void;
  setLauncherPropertiesForAndroid(launcherPropertiesMap: Object): void;
  refreshLauncherPropertiesForAndroid(): void;
  refreshLauncher(): void;
  addListener(eventName: string): void;
  removeListeners(count: number): void;
  processNotificationMessage(extras: Object): void;
  isSDKMessage(map: Object, callback: () => void): void;
  registerPush(fcmToken: string, isTestDevice: boolean): void;
  getNotificationPayload(readableMap: Object, callback: () => void): void;
  setNotificationActionSource(actionSource: string): void;
  present(tabString?: string, id?: string, callback?: () => void): void;
  setCustomFont(map: Object): void;
  sendEvent(event: string, objects: Array<any>): void;
  shouldOpenUrl(value: boolean): void;
  setTabOrder(tabNames: Array<any>): void;
  printDebugLogsForAndroid(value: boolean): void;
  setNotificationIconForAndroid(drawableName: string): void;
  setThemeForAndroid(name: string): void;
  setLoggerEnabled(value: boolean): void;
  isLoggerEnabled(callback: () => void): void;
  clearLogsForiOS(): void;
  setLoggerPathForiOS(value: string): void;
  writeLogForiOS(message: string, logLevel: string, callback?: () => void): void;
  dismissUI(): void;
  showFeedbackAfterSkip(enable: boolean): void;
  showFeedbackUpToDuration(duration: number): void;
  startNewChat(question: string, customChatId: string | null, departmentName: string | null, callback: () => void): void;
  startNewChatWithTrigger(customChatId: string | null, departmentName: string | null, callback: () => void): void;
  getChat(chatId: string, callback: () => void): void;
  setChatWaitingTime(seconds: number): void;
  isKnowledgeBaseEnabled(type: string, callback: () => void): void;
  setKnowledgeBaseRecentlyViewedCount(limit: number): void;
  setKnowledgeBaseVisibility(type: string, shouldShow: boolean): void;
  categorizeKnowledgeBase(type: string, shouldCategorize: boolean): void;
  combineKnowledgeBaseDepartments(type: string, merge: boolean): void;
  getKnowledgeBaseResourceDepartments(callback: () => void): void;
  openKnowledgeBase(type: string, id: string, callback: () => void): void;
  getKnowledgeBaseSingleResource(type: string, id: string, callback: () => void): void;
  getKnowledgeBaseResources(type: string, departmentID: string, parentCategoryID: string, page: number, limit: number, searchKey: string, callback: () => void): void;
  getKnowledgeBaseCategories(type: string, departmentID: string | null, parentCategoryID: string | null, callback: () => void): void;
  updateConfiguration(key: string, value: boolean): void;
  registerLocalizationFile(fileName: string): void;
  reRegisterPush(): void;
}

export default TurboModuleRegistry.getEnforcing<Spec>('RNZohoSalesIQMobilisten');
