/**
 * nativeCommon,通过Native.js调用原生API
 * 选择通讯录电话
 */
const nativeCommon = {
  /**
   * 通讯录模块
   */
  contacts: {
    getContact: function (callBack) {
      switch (plus.os.name) {
        case 'iOS':
          console.log('进来了')
          if (plus.device.model === 'iPhoneSimulator') {
            //模拟器
            nativeCommon.contacts.ios.visitContacts(function (
              name,
              phoneNumber
            ) {
              callBack(name, phoneNumber)
            })
          } else {
            console.log('真机')
            //真机
            nativeCommon.contacts.ios.visitAddressBook(function (
              name,
              phoneNumber
            ) {
              callBack(name, phoneNumber)
            })
          }
          break
        case 'Android':
          // Android通过plus.contacts.getAddressBook可弹出通讯录授权提示框
          // nativeCommon.contacts.android.visitContacts(function(name, phoneNumber) {
          // 	callBack(name, phoneNumber);
          // });
          plus.contacts.getAddressBook(
            plus.contacts.ADDRESSBOOK_PHONE,
            function (addressbook) {
              nativeCommon.contacts.android.visitContacts(function (
                name,
                phoneNumber
              ) {
                callBack(name, phoneNumber)
              })
            },
            function (e) {
              plus.nativeUI.alert('Get address book failed: ' + e.message)
            }
          )
          break
        default:
          break
      }
    },
    ios: {
      //供iOS系统调用
      /**
       * 访问通讯录,将获取的联系人信息通过callBack返回
       * 仅限模拟器使用(Native.js 的bug)
       * @param {Object} callBack回调
       */
      visitContacts: function (callBack) {
        const contactPickerVC = plus.ios.newObject(
          'CNContactPickerViewController'
        )
        //实现代理方法【- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;】
        //同时生成遵守CNContactPickerDelegate协议的代理对象delegate
        const delegate = plus.ios.implements('CNContactPickerDelegate', {
          'contactPicker:didSelectContact:': function (picker, contact) {
            //姓名
            var name = ''
            //姓氏
            var familyName = contact.plusGetAttribute('familyName')
            //名字
            var givenName = contact.plusGetAttribute('givenName')
            name = familyName + givenName
            //电话号码
            var phoneNo = ''
            var phoneNumbers = contact.plusGetAttribute('phoneNumbers')
            if (phoneNumbers.plusGetAttribute('count') > 0) {
              var phone = phoneNumbers.plusGetAttribute('firstObject')
              var phoneNumber = phone.plusGetAttribute('value')
              phoneNo = phoneNumber.plusGetAttribute('stringValue')
            }
            if (callBack) {
              callBack(name, phoneNo)
            }
          },
        })
        //给通讯录控制器contactPickerVC设置代理
        plus.ios.invoke(contactPickerVC, 'setDelegate:', delegate)
        //获取当前UIWebView视图
        const currentWebview = plus.ios.currentWebview()
        //根据当前UIWebView视图获取当前控制器
        const currentVC =
          nativeCommon.contacts.ios.getViewControllerByView(currentWebview)
        //由当前控制器present到通讯录控制器
        plus.ios.invoke(
          currentVC,
          'presentViewController:animated:completion:',
          contactPickerVC,
          true,
          null
        )
      },
      /**
       * 访问通讯录,将获取的联系人信息通过callBack返回
       * 仅限真机使用(Native.js 的bug)
       * @param {Object} callBack
       */
      visitAddressBook: function (callBack) {
        const peoplePickerNavController = plus.ios.newObject(
          'ABPeoplePickerNavigationController'
        )
        //实现代理方法【- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person;】
        //同时生成遵守ABPeoplePickerNavigationControllerDelegate协议的代理对象peoplePickerDelegate
        const peoplePickerDelegate = plus.ios.implements(
          'ABPeoplePickerNavigationControllerDelegate',
          {
            'peoplePickerNavigationController:didSelectPerson:': function (
              peoplePicker,
              person
            ) {
              //这里的peoplePicker竟然是CNContact实例对象,person是undefined
              console.log(JSON.stringify(peoplePicker))
              console.log(JSON.stringify(person))
              console.log(typeof person)

              //所以之前的代码不用改
              const contact = peoplePicker
              //姓名
              let name = ''
              //姓氏
              const familyName = contact.plusGetAttribute('familyName')
              //名字
              const givenName = contact.plusGetAttribute('givenName')
              name = familyName + givenName
              //电话号码
              let phoneNo = ''
              const phoneNumbers = contact.plusGetAttribute('phoneNumbers')
              if (phoneNumbers.plusGetAttribute('count') > 0) {
                const phone = phoneNumbers.plusGetAttribute('firstObject')
                const phoneNumber = phone.plusGetAttribute('value')
                phoneNo = phoneNumber.plusGetAttribute('stringValue')
              }
              if (callBack) {
                callBack(name, phoneNo)
              }
            },
          }
        )
        //给通讯录控制器peoplePickerNavController设置代理
        plus.ios.invoke(
          peoplePickerNavController,
          'setPeoplePickerDelegate:',
          peoplePickerDelegate
        )
        //获取当前UIWebView视图
        var UIApplicationClass = plus.ios.importClass('UIApplication')
        var UIAppObj = UIApplicationClass.sharedApplication()
        var del = plus.ios.invoke(UIAppObj, 'delegate')
        var appWindowObj = plus.ios.invoke(del, 'window')
        var appRootController = plus.ios.invoke(
          appWindowObj,
          'rootViewController'
        )
        //由当前控制器present到通讯录控制器
        plus.ios.invoke(
          appRootController,
          'presentViewController:animated:completion:',
          peoplePickerNavController,
          true,
          null
        )
      },
    },
    android: {
      //供android系统调用
      visitContacts: function (callBack) {
        plus.contacts.getAddressBook(
          plus.contacts.ADDRESSBOOK_PHONE,
          (book) => {
            const REQUESTCODE = 1000
            const main = plus.android.runtimeMainActivity()
            const Intent = plus.android.importClass('android.content.Intent')
            const ContactsContract = plus.android.importClass(
              'android.provider.ContactsContract'
            )
            const intent = new Intent(
              Intent.ACTION_PICK,
              ContactsContract.Contacts.CONTENT_URI
            )
            main.onActivityResult = function (requestCode, resultCode, data) {
              if (REQUESTCODE == requestCode) {
                var phoneNumber = ''
                var resultString = ''
                var context = main
                plus.android.importClass(data)
                var contactData = data.getData()
                var resolver = context.getContentResolver()
                plus.android.importClass(resolver)
                var cursor = resolver.query(contactData, null, null, null, null)
                plus.android.importClass(cursor)
                cursor.moveToFirst()
                //姓名
                var givenName =
                  cursor.getString(
                    cursor.getColumnIndex(
                      ContactsContract.Contacts.DISPLAY_NAME
                    )
                  ) || ''
                var contactId = cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts._ID)
                )
                var pCursor = resolver.query(
                  ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                  null,
                  ContactsContract.CommonDataKinds.Phone.CONTACT_ID +
                    ' = ' +
                    contactId,
                  null,
                  null
                )
                if (pCursor.moveToNext()) {
                  phoneNumber = pCursor.getString(
                    pCursor.getColumnIndex(
                      ContactsContract.CommonDataKinds.Phone.NUMBER
                    )
                  )
                }
                if (callBack) {
                  callBack(givenName, phoneNumber)
                }
                cursor.close()
                pCursor.close()
              }
            }
            main.startActivityForResult(intent, REQUESTCODE)
          }
        )
      },
    },
  },
}
module.exports = {
  nativeCommon: nativeCommon,
}