import {Converter} from './converter';
import {decryptData} from './decryptData';
import {EncryptedMessage} from './typings/encryptedMessage';

/**
 * Decrypts an encrypted Message
 * @param encryptedMessage The encrypted message
 * @param senderPublicKeyHex The senders public key in hex format
 * @param recipientPrivateKeyHex The recipients private (agreement) key in hex format
 * @return The original message
 * @module crypto
 */
export function decryptMessage(
    encryptedMessage: EncryptedMessage,
    senderPublicKeyHex: string,
    recipientPrivateKeyHex: string): string {

    if (!encryptedMessage.isText) {
        throw new Error('Encrypted message is marked as non-text. Use decryptData instead');
    }

    const encryptedData = {
        data: new Uint8Array(Converter.convertHexStringToByteArray(encryptedMessage.data)),
        nonce: new Uint8Array(Converter.convertHexStringToByteArray(encryptedMessage.nonce))
    };

    const decryptedBytes = decryptData(encryptedData, senderPublicKeyHex, recipientPrivateKeyHex);
    return Converter.convertByteArrayToString(decryptedBytes, 0, decryptedBytes.length);
}
