declare type ClientV1 = 'XieChengClient' | 'KaipiaoClient 票易通' | 'KaipiaoConsole';
declare type ClientV2 = 'XieChengClientV2' | 'KaipiaoClientV2' | 'KaipiaoConsoleV2';
declare type ClientV3 = 'XieChengClientV3' | 'KaipiaoClientV3' | 'KaipiaoConsoleV3';
interface IceInfo {
    /**
     * 操作系统
     * */
    OS: string;
    AppVer: string;
    /**
     * 客户端税件类型，*V2 表示是自研税件，XieCheng* 表示是携程相关
     *
     * */
    AppName: ClientV1 | ClientV2 | ClientV3;
    Channel: 'XieCheng' | 'TongYong' | 'YinLian';
    TaxSoftVer: string;
    TaxDiskType: 'BarWang' | 'HangXin';
}
interface BoundAsync {
    /**
     * example: {"OS": "Windows7", "AppVer": "0.2.3.0", "Channel": "XieCheng", "TaxSoftVer": "2. 0.17. 0", "TaxDiskType": "BaiWang"}
     *
     * 最早的老版本没有这个接口
     * */
    getIce?(): Promise<string>;
    /**
     * 发票修复
     * */
    callInvoiceFix(): void;
    /**
     * 强制重新加载
     * */
    refushHome(): void;
    /**
     * 判断是否是自研税件，新版本使用 IceInfo 的 AppName 字段判断
     *
     * 返回值为空，则表示不是自研税件
     *
     * 较早的老版本没有这个接口
     * */
    getVersionName?(): string | null;
    login(username: string, pwd: string): Promise<boolean>;
    logout(): void;
    /**
     * 客户端唤起客户端
     */
    jumpAction?(type: string, url: string): void;
}
interface InvokeOptions {
    width?: number;
    height?: number;
    /**
     * 窗口位置
     *
     * 与客户端约定:
     * 1. rightBottom 为非阻塞窗口
     * 2. 非阻塞窗口不能同时存在两个，新的窗口会将旧的非阻塞窗口关闭
     * */
    position?: 'centerParent' | 'centerScreen' | 'rightBottom';
    [key: string]: any;
}
interface CefPopupEnvironment {
    /**
     * data 为 JSON.stringify 之后的字符创串
     * */
    callback: (data?: string) => any;
}
interface CefEnvironment {
}
declare type NonFunction<T = any> = T extends Function ? never : T;
/**
 * T 回调数据类型
 * */
interface DialogBtn<T = any> {
    /**
     * 回调接收的数据，由于数据只有在 json 字符串化后才能在窗口之间传递，所以不能是哪些 json 字符串化之后会丢失的数据结构，也不能是函数
     * */
    data?: NonFunction<T>;
    /**
     * 文本
     * */
    innerHTML?: string;
    style?: Partial<CSSStyleDeclaration>;
    className?: string;
    closePopup?: boolean;
}
interface DialogRenderProps {
    voice?: string;
    title?: string;
    content?: string;
    btnsWrapStyle?: Partial<CSSStyleDeclaration>;
    btns?: DialogBtn[];
}
declare type InvokeCallback = (data?: any) => any;
interface CefJsWebBridge {
    invoke(type: string, options: InvokeOptions, callback: InvokeCallback): any;
    getVersion(callback: (v: string) => void): void;
    /** 监听客户端事件，用于接收从客户端发来的消息 */
    addEventListener(eventType: string, handler: (ev: any) => void): void;
    removeEventListener(eventType: string, handler: (ev: any) => void): void;
    [key: string]: any;
}
interface OpenTaxExeResult {
    code: number;
    data: boolean;
    message: string;
}
declare enum TaxSoftWares {
    HX = "hx",
    BW = "bw"
}
declare enum InvoiceType {
    Common = "c",
    Special = "s",
    Electronic = "ce",
    BlockChain = "bc"
}
interface TitleItem {
    companyName: string;
    taxNo?: string;
    buyAddress?: string;
    buyPhone?: string;
    bankName?: string;
    bankNo?: string;
    invoiceType?: InvoiceType;
    receiverPhone: string | number;
}
interface TaxDeviceInfo {
    /** 名称 */
    companyName: string | null;
    /** 税号 */
    companyTax: string | null;
    /** 机器码 */
    machineCode: string | null;
    /** SN 号 */
    diskCode: string | null;
    diskPassWord: string | null;
    /** '0' 航信 '1' 百旺 */
    diskType: '0' | '1';
    /** 可开票种，示例：'c|ce' */
    invoiceImpower: string | null;
    /** '0000' 表示读取成功 */
    returnCode: string | null;
    /** 读取成功/失败消息 */
    returnMsg: string | null;
    isHxV3?: string;
}
interface CTaxDeviceInfo extends TaxDeviceInfo {
    status: number;
    companyName: string;
    taxNo: string;
    deviceNo: string;
    message: string;
    type: number;
}
interface CefCore {
    ShowMainWindow(): void;
    /** 关闭当前窗口，如果直接从弹出窗口调用，会导致回调丢失 */
    CloseWindow(): void;
    SetWindowMinimized(): void;
    /** 打开航信进程/百旺，不传入根据税盘自动判断 */
    OpenTaxExe(name?: TaxSoftWares): Promise<boolean | string>;
    /** 查找当前环境,是否是航信还是百旺，不传入根据税盘自动判断 */
    IsTaxProcessOpen(name?: TaxSoftWares): Promise<boolean>;
    /** @return TaxDeviceInfo json 字符串 */
    GetNowTaxInfo(): Promise<string>;
    /**
     * 轻量版发送抬头信息，json -> TitleItem 数据字符串化
     * 如果成功，返回 null | ''
     * 有异常，则返回提示字符串
     * */
    DoSendTitle(json: string): Promise<string | null>;
    /**
     * 轻量版电票开具，json 数据字符串化
     * 如果成功，返回 null | ''
     * 如果证书密码错误，返回 '99'，则弹出提示窗口
     * 有异常，则返回提示字符串
     *
     * json 数据示例：https://www.showdoc.cc/363387933772874?page_id=2117156569221380 (页面中的 `入参示例`)
     * */
    MakeoutFromPreview(json: string): Promise<string | null>;
    /**
     * 轻量版设置证书密码
     * 如果成功，返回 null | ''
     * 有异常，则返回提示字符串
     * */
    SetCertPassword(pwd: string): Promise<string | null>;
    /**
     * 轻量版 pdf 生成
     * 如果成功，返回 null | ''
     * 如果证书密码错误，返回 '99'，则弹出提示窗口
     * 其他异常提示，返回提示字符串
     *
     * json 数据来源于服务端
     * */
    MakePdf(json: string): Promise<string | null>;
    /**
     * 打开一个外部浏览器接口
     * */
    OpenUrlOnSystem(url: string): void;
    /** 获取 DPI */
    GetDpi(): Promise<string>;
    /** Play audio */
    PlaySound(url: string): void;
    /** Has OFD function */
    HasOfd?(): Promise<boolean>;
    [key: string]: any;
}
declare type Unsubscribe = () => void;
interface JumpActionProps {
    type: '0' | '1';
    url: string;
}

/**
 * 只存在于完整版客户端
 * */
declare const boundAsync: BoundAsync;
/**
 * 判断是否是 KaiPiao 完整版客户端
 * */
declare const IsKaiPiaoClient: boolean;
/** 获取完整版客户端信息 */
declare function GetKaiPiaoClientInfo(): Promise<IceInfo | null>;
declare function GetKaiPiaoClientVersion(): Promise<string | null>;
declare function GetKaiPiaoClientAppName(): Promise<"XieChengClient" | "KaipiaoClient 票易通" | "KaipiaoConsole" | "XieChengClientV2" | "KaipiaoClientV2" | "KaipiaoConsoleV2" | "XieChengClientV3" | "KaipiaoClientV3" | "KaipiaoConsoleV3" | null>;
declare function IsKaiPiaoClientV2ByIce(): Promise<boolean>;
declare function IsKaiPiaoClientV3ByIce(): Promise<boolean>;
/**
 * 完整版 -  * 从选中的税盘判断是V2还是V3版本
 * */
declare function IsKaiPiaoClientV2ByTaxDisk(clientInfo: IceInfo): boolean;
declare function IsKaiPiaoClientV3ByTaxDisk(clientInfo: IceInfo): boolean;
/** 客户端唤起客户端 */
declare function JumpAction(jumpProps: JumpActionProps): void;
/** 完整版发票修复 */
declare function InvoiceFix(): Promise<boolean>;
/** 强制刷新页面 */
declare function PageReload(): void;
/** 完整版客户端登录 */
declare function LoginKaiPiao(username: string, pwd: string): Promise<boolean>;
/** 完整版客户端登出 */
declare function LogoutKaiPiao(): void;

/**
 * 存在于新完整版客户端，携程轻量版
 * */
declare const cefCore: CefCore;
declare const cefEnvironment: CefEnvironment;
/**
 * 只存在于主窗口环境
 * */
declare const cefJsWebBridge: CefJsWebBridge;
/**
 * 只存在于弹窗环境
 * */
declare const cefPopupEnvironment: CefPopupEnvironment;
/**
 * 是否是有 cefCore, cefEnvironment, cefPopupEnvironment, cefJsWebBridge 的客户端
 * */
declare const CefIsFullBridgeClient: boolean;
/** 是否是弹窗 */
declare const CefIsPopupClient: boolean;
/**
 * cefJsWebBridge 注册判断，cefJsWebBridge 的相关事件需要在其注册之后调用才能成功
 * */
declare const CefJsWebBridgeReady: Promise<unknown>;
/** 前置主窗体 */
declare function CefShowMainWindow(): void;
/** 关闭窗口 */
declare function CefWindowClose(): void;
declare function CefExitApp(): void;
/** 窗口最小化 */
declare function CefWindowMinimize(): void;
/** 打开一个外部浏览器接口 */
declare function CefOpenUrlInBrowser(url: string): void;
/** 监听客户端事件，用于接收从客户端发来的消息 */
declare function CefAddEventListener(type: string, handler: (ev: any) => void): void;
declare function CefRemoveEventListener(type: string, handler: (ev: any) => void): void;
/** 获取系统当前显示器的 DPI */
declare function CefGetDPI(): Promise<number>;
/** 打开弹窗，并接收弹窗传递过来的数据，只能在主窗口调用 */
declare function CefWindowPopup<T = any>(renderProps: DialogRenderProps, options?: InvokeOptions): Promise<T>;
/** popup 向主体窗口传递数据，只能在弹窗中调用 */
declare function CefPopupCallback<T = any>(data: T): void;
/** 版本，只能在主窗口调用 */
declare function CefVersion(): Promise<string>;
/** 获取税盘状态 */
declare function CefGetTaxDeviceInfo(): Promise<CTaxDeviceInfo>;
/** 订阅税盘状态 */
declare function CefSubscribeTaxDeviceInfo(callback: (info: CTaxDeviceInfo) => any, duration?: number): Unsubscribe;
/** 打开航信进程/百旺，不传入根据税盘自动判断 */
declare function CefOpenTaxSoftware(name?: TaxSoftWares): Promise<any>;
/** 轻量版发送抬头信息到客户端 */
declare function CefSendTitleToTaxSoftware(data: TitleItem): Promise<string | null>;
/**
 * 轻量版电票开具，json 数据字符串化
 * 如果成功，返回 null | ''
 * 如果证书密码错误，返回 '99'，则弹出提示窗口
 * 有异常，则返回提示字符串
 *
 * data 数据示例：https://www.showdoc.cc/363387933772874?page_id=2117156569221380 (页面中的 `入参示例`)
 * */
declare function CefSendDataForCE(data: any): Promise<string | null>;
/**
 * 轻量版设置证书密码
 * 如果成功，返回 null | ''
 * 有异常，则返回提示字符串
 * */
declare function CefSetCertPassword(pwd: string): Promise<string | null>;
/**
 * 轻量版 pdf 生成
 * 如果成功，返回 null | ''
 * 如果证书密码错误，返回 '99'，则弹出提示窗口
 * 其他异常提示，返回提示字符串
 *
 * data 数据来源于服务端
 * */
declare function CefMakePdf(data: any): Promise<string | null>;
/** 查找当前环境,是否是航信还是百旺，不传入根据税盘自动判断 */
declare function CefIsTaxSoftWareOpen(name?: TaxSoftWares): Promise<boolean>;
/** Play sound */
declare function CefPlayAudio(url: string): void;
/** Has OFD function */
declare function CefHasOFD(): Promise<boolean>;
/**
 * 调用没记录的可能存在的接口
 *
 * 一般用于服务端通过 H5 与 .net 客户端交互，这时前端可以做被动调用就行，接口名以及参数都由后端提供
 * */
declare function CefCall(apiName: string, ...args: any[]): any;
/** 退出客户端 */
declare function SignOutClient(version: string): any;

/**
 * 是否是客户端
 * */
declare const IsClient: boolean;

export { BoundAsync, CTaxDeviceInfo, CefAddEventListener, CefCall, CefCore, CefEnvironment, CefExitApp, CefGetDPI, CefGetTaxDeviceInfo, CefHasOFD, CefIsFullBridgeClient, CefIsPopupClient, CefIsTaxSoftWareOpen, CefJsWebBridge, CefJsWebBridgeReady, CefMakePdf, CefOpenTaxSoftware, CefOpenUrlInBrowser, CefPlayAudio, CefPopupCallback, CefPopupEnvironment, CefRemoveEventListener, CefSendDataForCE, CefSendTitleToTaxSoftware, CefSetCertPassword, CefShowMainWindow, CefSubscribeTaxDeviceInfo, CefVersion, CefWindowClose, CefWindowMinimize, CefWindowPopup, DialogBtn, DialogRenderProps, GetKaiPiaoClientAppName, GetKaiPiaoClientInfo, GetKaiPiaoClientVersion, IceInfo, InvoiceFix, InvoiceType, InvokeOptions, IsClient, IsKaiPiaoClient, IsKaiPiaoClientV2ByIce, IsKaiPiaoClientV2ByTaxDisk, IsKaiPiaoClientV3ByIce, IsKaiPiaoClientV3ByTaxDisk, JumpAction, JumpActionProps, LoginKaiPiao, LogoutKaiPiao, NonFunction, OpenTaxExeResult, PageReload, SignOutClient, TaxDeviceInfo, TaxSoftWares, TitleItem, Unsubscribe, boundAsync, cefCore, cefEnvironment, cefJsWebBridge, cefPopupEnvironment };
