import { BridgePlugin } from '../bridge';

interface IScanBankCardParam {
  // true直接启动扫描模式，不打开新ACTIVITY，将结果返回
  scanMode: 'quick' | 'activity';
}

interface IBankCardInfo {
  // 银行卡号信息
  cardNo: string;
  // 银行卡图片，H5自动记录
  idCardImgBase64: string;
}

// 针对NTV返回的报文协议定义
interface IScanBankCardResult {
  // 0:识别成功 1:识别失败 2:授权失败 3:取消
  status: '0' | '1' | '2' | '3';
  // true直接启动扫描模式，不打开新ACTIVITY，将结果返回
  scanMode: 'quick' | 'activity';
  // 银行卡信息
  cardInfo: IBankCardInfo;
}

export class ScanBankCard<K> extends BridgePlugin<IScanBankCardParam, K>{
  protected get ntvPluginName() {
    return '_ntv_util_scan_bank_card';
  }

  protected get availableMinVersion() {
    return '1.0.0';
  }

  protected bridgeExecChrome(pluginName?: string | undefined): void {
    // 可针对不同运行环境实现特定的调用逻辑来MOCK，弥补平台差异性.
    throw new Error('brigeExecChrome() 未针对当前环境实现');
  }
}

/**
 * 扫描银行卡
 * @returns Promise<IScanBankCardResult>
 */
export const scanBankCard = (param: IScanBankCardParam) => {
  return new ScanBankCard<IScanBankCardResult>(param).invokeOnce().then(result => {
    return result.cbData;
  })
}