interface OnlyOfficeContentControl {
  AddElement?(value: unknown, index: number): boolean;
  GetTag?(): string;
  SetAlias?(value: string): boolean;
  SetAppearance?(value: string): unknown;
  SetLock?(value: string): boolean;
  SetTag?(value: string): boolean;
}

interface OnlyOfficeRun {
  AddText?(text: string): boolean;
}

interface OnlyOfficeParagraph {
  AddInlineLvlSdt?(control: OnlyOfficeContentControl): void;
}

interface OnlyOfficeDocument {
  GetAllContentControls(): OnlyOfficeContentControl[];
  GetCustomProperties?(): OnlyOfficeCustomProperties;
  InsertContent(content: OnlyOfficeParagraph[], replaceSelection: boolean): boolean;
}

interface OnlyOfficeCustomProperties {
  Add(name: string, value: string): unknown;
  Delete(name: string): unknown;
  Get(name: string): unknown;
}

interface OnlyOfficeApi {
  CreateInlineLvlSdt?: () => OnlyOfficeContentControl;
  CreateParagraph?: () => OnlyOfficeParagraph;
  CreateRun?: () => OnlyOfficeRun;
  GetDocument(): OnlyOfficeDocument;
}

interface AscPlugin {
  callCommand(command: () => string, isClose: boolean, isCalc: boolean, callback: (value: unknown) => void): void;
  info?: { options?: unknown };
}

interface AscGlobal {
  plugin: AscPlugin;
  scope: Record<string, unknown>;
}

interface Window {
  Asc: AscGlobal;
}

declare const Api: OnlyOfficeApi;
declare const Asc: AscGlobal;
