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

interface IContactItem {
  // 联系人姓名
  contactName: string;
  // 联系人电话号码数组
  phones: string[];
}

interface IGetAllContactsResult {
  // 获取联系人状态, "0"成功|"1"获取失败
  status: '0' | '1';
  contactList: IContactItem[];
}

export class GetAllContacts<K> extends BridgePlugin<void, K>{

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

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

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

/**
 * 不打开通讯录列表，静默尝试拉取所有的联系人信息, 以及每个联系人的手机号列表
 * @returns IContactItem[]
 */
export const getAllContacts = () => {
  return new GetAllContacts<IGetAllContactsResult>().invokeOnce().then(result => {
    const status = get(result.cbData, 'status', '0');
    const contacts = get(result.cbData, 'contactList', []);
    return (status === '0' ? contacts : []) as IContactItem[];
  });
}