import { BaseAsmModule } from 'emscripten-wasm-loader';
import { LanguageCode } from './languageCode';

/**
 * Holds probability that Span, specified by start/end indices, is a given
 * language. The langauge is not stored here; it can be found in Result, which
 * holds a vector of SpanInfo.
 */
export interface SpanInfo {
  start_index: number;
  end_index: number;
  probability: number;
}

export interface LanguageResult {
  /**
   * Detected language. {UnknownLanguage} if detection fails.
   */
  language: LanguageCode;
  /**
   * Language probability.
   */
  probability: number;
  /**
   * Whether the prediction is reliable.
   */
  is_reliable: boolean;
  /**
   * Proportion of bytes associated with the language. If FindLanguage is
   * called, this variable is set to 1.
   */
  proportion: number;
  /**
   * Specifies the byte ranges that |language| applies to.
   */
  byte_ranges: Array<SpanInfo>;
}

/**
 * @internal
 *
 * Interface for module generated by emscripten to load wasm binary.
 * https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
 */
export interface CldAsmModule extends Required<BaseAsmModule> {
  allocateUTF8: (str: string) => number;
  setValue: (ptr: number, value: any, type: 'i8' | 'i16' | 'i32' | 'i64' | 'float' | 'double' | '*') => void;
  initializeRuntime(): Promise<boolean>;
}
