    'use strict';

    const Base = require('./Base');

    /**
     * Represents a Contact on WhatsApp
     * @extends {Base}
     */
    class Contact extends Base {
        constructor(client, data) {
            super(client);

            if(data) this._patch(data);
        }

        _patch(data) {
            /**
             * ID that represents the contact
             * @type {object}
             */
            this.id = data.id;

            /**
             * Contact's phone number
             * @type {string}
             */
            this.number = data.userid;

            /**
             * Indicates if the contact is a business contact
             * @type {boolean}
             */
            this.isBusiness = data.isBusiness;

            /**
             * Indicates if the contact is an enterprise contact
             * @type {boolean}
             */
            this.isEnterprise = data.isEnterprise;

            this.labels = data.labels;

            /**
             * The contact's name, as saved by the current user
             * @type {?string}
             */
            this.name = data.name;

            /**
             * The name that the contact has configured to be shown publically
             * @type {string}
             */
            this.pushname = data.pushname;

            this.sectionHeader = data.sectionHeader;

            /**
             * A shortened version of name
             * @type {?string}
             */
            this.shortName = data.shortName;

            this.statusMute = data.statusMute;
            this.type = data.type;
            this.verifiedLevel = data.verifiedLevel;
            this.verifiedName = data.verifiedName;

            /**
             * Indicates if the contact is the current user's contact
             * @type {boolean}
             */
            this.isMe = data.isMe;

            /**
             * Indicates if the contact is a user contact
             * @type {boolean}
             */
            this.isUser = data.isUser;

            /**
             * Indicates if the contact is a group contact
             * @type {boolean}
             */
            this.isGroup = data.isGroup;

            /**
             * Indicates if the number is registered on WhatsApp
             * @type {boolean}
             */
            this.isWAContact = data.isWAContact;

            /**
             * Indicates if the number is saved in the current phone's contacts
             * @type {boolean}
             */
            this.isMyContact = data.isMyContact;

            return super._patch(data);
        }

        /**
         * Returns the contact's profile picture URL, if privacy settings allow it
         * @returns {Promise&lt;string>}
         */
        async getProfilePicUrl() {
            const profilePic = await this.client.pupPage.evaluate((contactId) => {
                return window.Store.Wap.profilePicFind(contactId);
            }, this.id._serialized);

            return profilePic ? profilePic.eurl : undefined;
        }

    }

    module.exports = Contact;