/* globals openpgp */

importScripts('../../dist/openpgp.js');

const publicKeyArmored = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.7.2
Comment: https://openpgpjs.org

xjMEXh8OhhYJKwYBBAHaRw8BAQdAgfwsqplEv19tUU/CoJOsGiWhssumaO5p
aFHmyl5hHpbNIURhbmllbCA8ZC5odWlnZW5zQHByb3Rvbm1haWwuY29tPsJ4
BBAWCgAgBQJeHw6GBgsJBwgDAgQVCAoCBBYCAQACGQECGwMCHgEACgkQ33Rm
ygBzJWpArgEA7EG2cf40B92+ohh5+r6G/YBzwgy0JxhdYeI6VeTLjwABAIMO
45Nn00opO7gI7nqu0VHkWWDREKH3zHcVkitrpXcNzjgEXh8OhhIKKwYBBAGX
VQEFAQEHQK8Z7Zeg4qap2g8+axIMWaHmn+dbsBjMjssfRlkZRx1oAwEIB8Jh
BBgWCAAJBQJeHw6GAhsMAAoJEN90ZsoAcyVqjigA/0q+C3cX2cVRFOWq1xKt
aKsRWgxXiPCDD1SP6nqS9dIiAP9bl5iix1Wo1eTSV1f+nqGmTkFaZbnvcfZy
Q9eY5AnnBg==
=jTkZ
-----END PGP PUBLIC KEY BLOCK-----
`;

const privateKeyArmored = `-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: OpenPGP.js v4.7.2
Comment: https://openpgpjs.org

xYYEXh8OhhYJKwYBBAHaRw8BAQdAgfwsqplEv19tUU/CoJOsGiWhssumaO5p
aFHmyl5hHpb+CQMIQGjCBRmnRL1g1x10ygKW8a29+2V7pGbRFShEi+92Y6Xa
js3SmduC5K9T2Jnn3Mn1esoCA0gliMpakkWZm3B65J2axI8qo8RTGRnRP1Yp
w80hRGFuaWVsIDxkLmh1aWdlbnNAcHJvdG9ubWFpbC5jb20+wngEEBYKACAF
Al4fDoYGCwkHCAMCBBUICgIEFgIBAAIZAQIbAwIeAQAKCRDfdGbKAHMlakCu
AQDsQbZx/jQH3b6iGHn6vob9gHPCDLQnGF1h4jpV5MuPAAEAgw7jk2fTSik7
uAjueq7RUeRZYNEQoffMdxWSK2uldw3HiwReHw6GEgorBgEEAZdVAQUBAQdA
rxntl6DipqnaDz5rEgxZoeaf51uwGMyOyx9GWRlHHWgDAQgH/gkDCNKsGYh3
rcY5YKc2PzxhFexONEmwJ6Cq3KJ+nW9RbRDYb78aitaacLmWfuxNYu12OhKr
DLwUsgyr8vXKg6yZcmNnpi0P1VYElfb4ECZABq/CYQQYFggACQUCXh8OhgIb
DAAKCRDfdGbKAHMlao4oAP9Kvgt3F9nFURTlqtcSrWirEVoMV4jwgw9Uj+p6
kvXSIgD/W5eYosdVqNXk0ldX/p6hpk5BWmW573H2ckPXmOQJ5wY=
=lOCw
-----END PGP PRIVATE KEY BLOCK-----
`;

onmessage = async function({ data: { action, message }, ports: [port] }) {
  try {
    let result;
    switch (action) {
      case 'encrypt': {
        const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
        const privateKey = await openpgp.decryptKey({
          privateKey: await openpgp.readKey({ armoredKey: privateKeyArmored }),
          passphrase: 'test'
        });
        const data = await openpgp.encrypt({
          message: await openpgp.createMessage({ text: message }),
          encryptionKeys: publicKey,
          signingKeys: privateKey
        });
        result = data;
        break;
      }
      case 'decrypt': {
        const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
        const privateKey = await openpgp.decryptKey({
          privateKey: await openpgp.readKey({ armoredKey: privateKeyArmored }),
          passphrase: 'test'
        });
        const { data, signatures } = await openpgp.decrypt({
          message: await openpgp.readMessage({ armoredMessage: message }),
          verificationKeys: publicKey,
          decryptionKeys: privateKey
        });
        await signatures[0].verified;
        result = data;
        break;
      }
    }
    port.postMessage({ result });
  } catch (e) {
    console.error(e); // eslint-disable-line no-console
    port.postMessage({ error: e.message });
  }
};
