import { MultiBar } from "cli-progress";
import OpenAI, { ClientOptions } from "openai";
import { ChatCompletionCreateParams } from "openai/resources";

export interface ILanguage {
  /** 语言code */
  code: SupportLanguageType;
  /**语言名称 */
  name: string;
}

export type SupportLanguageType =
  | "en"
  | "zh-CN"
  | "zh-TW"
  | "ja"
  | "ar"
  | "bn"
  | "de"
  | "es-ES"
  | "fr"
  | "hi"
  | "id"
  | "it"
  | "ko"
  | "ms"
  | "my"
  | "ne-NP"
  | "nl"
  | "pl"
  | "pt-PT"
  | "ru"
  | "tl"
  | "tr"
  | "vi"
  | "uk"
  | "ur-PK";

export type SupportLanguageMap = Partial<
  Record<SupportLanguageType, ILanguage>
>;

export interface ILogError {
  error: Error;
}

export interface ITranslateLogError extends ILogError {
  key: string;
  language: SupportLanguageType;
  fileName: string;
}

export interface ICreateJsonFileParams {
  language: SupportLanguageType;
  fileName: string;
  folderName: string;
  jsonData: IJson;
}

export interface IOutputLanguageFile {
  folderName: SupportLanguageType;
  fileName: string;
  jsonMap: IJson;
  newTranslations?: IJson; // 只有新翻译的内容，用于写入缓存
}

export interface IRegisterLanguageCacheFile {
  folderName: string;
  fileName: string;
  language: SupportLanguageType;
  jsonMap: IJson;
  /** await translate file path */
  sourceFilePath: string;
}

export interface IJson {
  [key: string]: string;
}

export interface ISingleTranslate {
  language: SupportLanguageType;
  fileName: string;
  translateJson: IJson;
  multiBar: MultiBar;
  callback?: () => void;
}

export interface ITranslateChat {
  key: string;
  value: string;
  language: SupportLanguageType;
  index: number;
  fileName: string;
}

export interface ITranslateChatResponse {
  key: string;
  value: string;
  index: number;
  error?: Error;
}

export interface ICwalletTranslateParams {
  cacheFileRootPath: string;
  /** await translate file root path */
  fileRootPath: string;
  fineTune: string[];
  languages: SupportLanguageType[];
  outputRootPath?: string;
  sourceLanguage?: SupportLanguageType;
  openaiClientConfig?: ClientOptions;
  chatCompletionCreateParams?: Partial<ChatCompletionCreateParams>;
}

export interface ITranslate {}

export interface IOpenaiConfig {
  model: OpenAI.Chat.ChatModel;
}

export interface ITestParams {
  key: string;
  question: string;
}

export interface IGenerateCacheParams {
  sourceFolderPath: string;
  sourceLanguage: SupportLanguageType;
  languages: SupportLanguageType[];
  exportFolderPath: string;
}

export interface IDeleteSingleCacheParams {
  keys: string[];
  cacheFolderPath: string;
  cacheFileName: string;
  /** 不传默认删除所有 */
  languages?: SupportLanguageType[];
}

export interface ICacheFile {
  fileName: string;
  filePath: string;
  data: Record<string, string>;
}
