import CommanderCommand from '../../CommanderCommand.js';
import inquirer         from 'inquirer';
import ora              from 'ora';
import SessionManager   from '../../../managers/SessionManager.js';


class AuthLogoutCommand extends CommanderCommand {
    protected commandName: string = 'logout';

    protected defineCommand() {
        this.command
            .description('logout of Dojo')
            .option('-f, --force', 'attempt to logout without prompting for confirmation')
            .action(this.commandAction.bind(this));
    }

    protected async commandAction(options: { force: boolean }): Promise<void> {
        if ( !options.force ) {
            const confirm: boolean = (await inquirer.prompt({
                                                                name   : 'confirm',
                                                                message: 'Are you sure?',
                                                                type   : 'confirm',
                                                                default: false
                                                            })).confirm;

            if ( !confirm ) {
                return;
            }
        }

        const spinner: ora.Ora = ora('Please wait while we are logout you from Dojo...').start();
        SessionManager.logout();
        spinner.succeed('You are now logged out from Dojo.');
    }
}


export default new AuthLogoutCommand();