import { BridgePlugin } from '../bridge';
import { get } from 'para-utils';

interface IScanParam {
  scanType: 'qrCode'; //  'qrCode',默认二维码
  // 扫描结果, needResult='1'，才有返回内容
  needResult: '0' | '1';
}

export interface IScanResult {
  // 扫描结果, needResult='1'，才有返回内容
  resultStr: string; //  'https://domain.com'
}

export class Scan<K> extends BridgePlugin<IScanParam, K>{
  protected get ntvPluginName() {
    return '_ntv_util_scan';
  }

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

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

/**
 * 扫一扫 需result
 * @param param IScanParam
 * @returns IScanResult
 */
export const scanWithResult = () => {
  return new Scan<IScanResult>({ scanType: 'qrCode', needResult: '1' }).invokeOnce().then((result) => {
    return get(result.cbData, 'resultStr', '');
  });
};

/**
 * 扫一扫 无需result
 * @param param IScanParam
 */
export const scan = () => {
  new Scan<void>({ scanType: 'qrCode', needResult: '0' } as IScanParam).invoke();
}


