const {notarize} = require('electron-notarize');

const notarizeMacBuild = async function (context) {
    // keep this in sync with appId in the electron-builder config
    const appId = 'edu.mit.scratch.scratch-desktop';

    if (!process.env.AC_USERNAME) {
        console.error([
            'This build is not notarized and will not run on newer versions of macOS!',
            'Notarizing the macOS build requires an Apple ID. To notarize future builds:',
            '* Set the environment variable AC_USERNAME to your@apple.id and',
            '* Either set AC_PASSWORD or ensure your keychain has an item for "Application Loader: your@apple.id"'
        ].join('\n'));
        return;
    }

    const appleId = process.env.AC_USERNAME;
    const appleIdKeychainItem = `Application Loader: ${appleId}`;

    if (process.env.AC_PASSWORD) {
        console.log(`Notarizing with Apple ID "${appleId}" and a password`);
    } else {
        console.log(`Notarizing with Apple ID "${appleId}" and keychain item "${appleIdKeychainItem}"`);
    }

    const {appOutDir} = context;
    const productFilename = context.packager.appInfo.productFilename;
    await notarize({
        appBundleId: appId,
        appPath: `${appOutDir}/${productFilename}.app`,
        appleId,
        appleIdPassword: process.env.AC_PASSWORD || `@keychain:${appleIdKeychainItem}`
    });
};

const afterSign = async function (context) {
    const {electronPlatformName} = context;

    switch (electronPlatformName) {
    case 'mas': // macOS build for Mac App Store
        break;
    case 'darwin': // macOS build NOT for Mac App Store
        await notarizeMacBuild(context);
        break;
    }
};

module.exports = afterSign;