import {Converter} from './converter';
import {encryptData} from './encryptData';
import {EncryptedMessage} from './typings/encryptedMessage';

/**
 * Encrypts arbitrary message (UTF-8 compatible) for P2P message/data exchange using asymmetric encryption
 * @see [[decryptMessage]]
 * @param plaintext Message to be encrypted
 * @param recipientPublicKeyHex The recipients public key hexadecimal format
 * @param senderPrivateKeyHex The senders private (agreement) key hexadecimal format
 * @return The encrypted Message
 * @module crypto
 */
export function encryptMessage(plaintext: string, recipientPublicKeyHex: string, senderPrivateKeyHex: string): EncryptedMessage {

    const data = new Uint8Array(Converter.convertStringToByteArray(plaintext));
    const encryptedData = encryptData(data, recipientPublicKeyHex, senderPrivateKeyHex);

    return {
        data: Converter.convertByteArrayToHexString(encryptedData.data),
        nonce: Converter.convertByteArrayToHexString(encryptedData.nonce),
        isText: true,
    };
}

