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

interface ILocateParam {
  // 客户端定位loading框是否展示, "1":显示(默认), "2":不显示
  showType: '1' | '2';
  // 定位信息的获取类型
  // "1" 使用缓存，如果没有缓存，发起定位(默认) "2" 不使用缓存，强制发起定位 "3" 使用缓存(无论有无都返回)
  cacheType: '1' | '2' | '3';
  // 定位请求弹框是否显示(无定位权限时，进行弹框提示) true: 显示(默认), false: 不显示；
  // 当true强制弹窗拿定位，每次都弹，如果false第一次用户拒绝了，下一次就不弹窗了，native自行缓存此状态
  locationAlert: 'true' | 'false';
  // 默认:10 , 超时时间 since 8.5.0(Android) 备注：因Android定位sdk问题/特殊机型问题，超时无回调，导致页面加载失败 定位时间默认10s，目前仅Android有效
  timeoutInterval?: string;
}

interface ILocateResult {
  // 经度 iOS是高德经纬度、Android是百度经纬度
  lon: string;
  // 维度
  lat: string;
  // 定位数据解析类型：1苹果 2百度 3谷歌 4服务器接口 5高德
  geocodeServerType: string;
  // "CN"中国
  countryCode: string;
  // 国家名称
  countryName: string;
  // 省份名称
  provinceName: string;
  // 行政区code
  // 城市代号 021
  cityCode: string;
  // 城市名称： 上海市
  cityName: string;
  // 行政区代号：如：浦东新区高德adCode
  districtCode: string;
  // 行政区名称：如：浦东新区
  districtName: string;
  // 详细地址信息
  address: string;
  // "东风国际大厦"
  // AOI （兴趣面，描述面状的地址实体）
  aoiName: string;
  // 如: 中国农业发展银行(浦东分行)
  // POI是“Point of Interest”的缩写，中文可以翻译为“兴趣点”，在地理信息系统中，一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
  poiName: string;
  // 地址描述：在中国农业发展银行(浦东分行)附近
  description: string;
  // 什么路, 如:花木路
  road: string;
  // 街道名称, 如:花木路
  street: string;
  // 街道号码：114号
  streetNum: string;
  // 定位时间的时间戳（毫秒）
  locateTimestamp: string;
}

export class Locate<K> extends BridgePlugin<ILocateParam, K>{

  protected get ntvPluginName() {
    return '_ntv_utils_locate';
  }

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

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

/**
 * 获取定位信息
 */
export const getLocation = (param) => {
  return new Locate<ILocateResult>(param).invokeOnce().then(result => {
    return result.cbData;
  })
}