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

/**
 * Codegen spec for the Freshdesk native module.
 *
 * Parsed by @react-native/codegen. MUST contain only the react-native import,
 * the Spec interface, and the default export. All runtime logic (no-op
 * fallback, NativeEventEmitter wiring) lives in ./FreshdeskModule.ts.
 *
 * Rich public types (FreshdeskConfig, ContentConfiguration, ...) stay in
 * ./types.ts; the spec uses `Object` / `string` because codegen cannot
 * resolve cross-file structured types.
 */
export interface Spec extends TurboModule {
  initialize(config: Object): Promise<void>;
  openSupport(): Promise<void>;
  openKnowledgeBase(): Promise<void>;
  openTopic(topicName: string, topicId: string): Promise<void>;
  getUnreadCount(): Promise<number>;
  trackEvent(name: string, properties: Object): Promise<void>;
  setUserProperties(properties: Object): Promise<void>;
  setTicketProperties(properties: Object): Promise<void>;
  authenticateAndUpdate(jwt: string): Promise<void>;
  resetUser(): Promise<{ success: boolean; message: string; error: string }>;
  dismiss(): Promise<void>;
  setLinkHandlerEnabled(enabled: boolean): Promise<void>;
  getSDKVersion(): Promise<string>;
  getUser(): Promise<string>;
  setContentConfiguration(configJson: string): Promise<void>;
  enableDebugLogs(enabled: boolean): Promise<void>;
  runDiagnostics(): Promise<Object>;
  addListener(eventName: string): void;
  removeListeners(count: number): void;
}

export default TurboModuleRegistry.get<Spec>('FreshdeskReactNative');
