import * as PUPPET from '@juzi/wechaty-puppet'
import { SPECIAL_BOT_PUSHNAME } from '../../config.js'

import type { WhatsAppContactPayload } from '../../schema/whatsapp-type.js'
import { ContactStatus } from '../../schema/contact.js'

export function parserContactRawPayload (contactPayload: WhatsAppContactPayload, userName?: string): PUPPET.payloads.Contact {
  let type
  if (contactPayload.isUser) {
    type = PUPPET.types.Contact.Individual
  } else if (contactPayload.isEnterprise) {
    type = PUPPET.types.Contact.Corporation
  } else {
    type = PUPPET.types.Contact.Unknown
  }
  let name

  // const isFriend = contactPayload.isMyContact || contactPayload.isMe

  const additionalInfo: any = {
    status: ContactStatus.FRIEND,
  }

  if (contactPayload.isMe) {
    name = userName || contactPayload.pushname
    if (name === SPECIAL_BOT_PUSHNAME) {
      name = contactPayload.shortName
    }

    additionalInfo.corpId = contactPayload.id._serialized
    additionalInfo.sCorpId = contactPayload.id._serialized
    additionalInfo.corpName = `${contactPayload.isBusiness ? 'Whatsapp Business' : 'Whatsapp'}:${contactPayload.id._serialized}`

  } else {
    /**
     * 在 iOS 中， pushname 是联系人自己设置的名字， name 是bot通讯录中联系人的名字
     * 在 Android 中， pushname 是 undefined ， name 是bot通讯录中联系人的名字
     * 因此应该优先使用 name
     */
    name = contactPayload.name || contactPayload.pushname
  }

  const number = contactPayload.number || contactPayload.id.user

  return {
    avatar: contactPayload.avatar,
    friend: true,
    gender: PUPPET.types.ContactGender.Unknown,
    id: contactPayload.id._serialized,
    name: name || contactPayload.id._serialized,
    phone: [number],
    type: type,
    handle: number,
    weixin: number,
    additionalInfo: JSON.stringify(additionalInfo),
    corporation: `${contactPayload.isBusiness ? 'Whatsapp Business' : 'Whatsapp'}:${contactPayload.id._serialized}`,
  }
}
