['config', 'crypto', 'sqlite', 'services', 'commands', 'cli'].forEach(i => require(`./controllers/${i}`));

const inquirer = require('inquirer');

const main = async () => {

    await sqlite.initialize();

    await cryptoController.loadFactories(); 
    if (process.argv.length > 3) commandlineController.execute(); 
    else mainMenu(); 
}

const mainMenu = async () => {

    let answers = await inquirer.prompt([{
        type: "list",
        name: "menu",    
        message: `
        XFT Anon CLI (Mainnet Edition)

        XFT Balance: ${parseInt(helpers.fromWei(cryptoController.account.balance))}

        \x1b[31m${serviceController.error}\x1b[0m
        
        Select an option:\n`,
        choices: [
            {
                value: 'c',
                name: "\tCONFIG",
                short: "\n\tEditing Config"
            },
            {
                value: 'd',
                name: "\tBURN XFT & CONVERT TO DEPOSIT NOTE",
                short: "\n\tMaking a Deposit"
            },
            {
                value: 'w',
                name: "\tBURN DEPOSIT NOTE & MINT ANON ASSET",
                short: "\n\tMaking a Withdrawal"
            },
            {
                value: 's',
                name: "\tSHIFT ANON ASSET TO XFT",
                short: "\n\tPerforming a Shift to XFT"
            },
            {
                value: 'b',
                name:'\tVIEW BALANCES',
                short: "\n\tViewing Token Balances"
            },
            {
                value: 'exit',
                name: "\tEXIT\n",
            }
        ]
    }])

    serviceController.error = "";
    await commandController[answers.menu]();
    mainMenu(); 
}

main();