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

type permissionNames = 'location' | 'storage' | 'telephone' | 'camera' | 'sms' | 'contacts';

type QueryPermissionItems = {
  [index in permissionNames]?: boolean;
};

interface IQueryPermissionParam {
  names?: permissionNames[];
}

interface IQueryPermissionItems {
  name: permissionNames;
  isOpen: 'true' | 'false';
}

interface IQueryPermissionResult {
  // NTV 版本号 6.0.1
  version: string;
  // 返回的权限列表+状态
  permissions: IQueryPermissionItems[];
}

export class QueryPermission<K> extends BridgePlugin<IQueryPermissionParam, K>{
  protected get ntvPluginName() {
    return "_ntv_util_query_permission";
  }

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

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

/**
 * 查询应用权限是否打开
 * @param names 指定查询的权限名称
 * @returns 返回对象
 */
export const queryPermission = (...names: permissionNames[]) => {
  return new QueryPermission<IQueryPermissionResult>({ names }).invokeOnce().then(result => {
    const cbData = result.cbData;
    const newResult: QueryPermissionItems = {};
    get(cbData, 'permissions', []).forEach((item: IQueryPermissionItems) => {
      newResult[item.name] = Boolean(item.isOpen);
    });
    return {
      version: cbData.version,
      permissions: newResult,
    }
  });
}
