/* eslint-disable no-await-in-loop */
/* eslint-disable perfectionist/sort-objects */
/* eslint-disable perfectionist/sort-imports */
import ora from 'ora';
import chalk from 'chalk';
import gradient from 'gradient-string';
import { LOGO } from './logo.js';
const campfireTessBlue = '#3F5485';
const campfireVibrantRed = '#E3453E';
const campfireOrange = '#ED6B2C';
const campfireLightOrange = '#ED9837';
const campfireYellow = '#EFBE43';
const campfireLightYellow = '#F5E5CA';
const primary = chalk.hex(campfireOrange).bold;
const secondary = chalk.hex(campfireLightOrange);
const tertiary = chalk.hex(campfireYellow);
const neutral = chalk.white;
const emphasis = chalk.hex(campfireVibrantRed);
const success = chalk.greenBright;
const campfireGradient = gradient([
    campfireTessBlue,
    campfireVibrantRed,
    campfireLightOrange,
    campfireYellow,
    campfireLightYellow,
]);
const sleep = ms => new Promise(r => { setTimeout(r, ms); });
export default {
    spin(msg, opts) {
        const spinner = ora(msg);
        spinner.color = opts?.color || 'cyan';
        return spinner.start();
    },
    async printLogo() {
        const logo = campfireGradient.multiline(LOGO);
        const lines = logo.split('\n');
        for (const str of lines) {
            await sleep(100);
            console.log(str);
        }
        await sleep(500);
    },
    async header(msg) {
        console.log(campfireGradient(msg));
        await sleep(1000);
    },
    async info(msg) {
        console.log(secondary(msg));
    },
    async note(msg) {
        console.log(chalk.underline(msg));
    },
    async text(msg) {
        console.log(msg);
        await sleep(1000);
    },
    async error(msg) {
        console.log(emphasis(msg));
    },
    async warn(msg) {
        console.log(emphasis(msg));
    },
    primary: (msg) => primary(msg),
    secondary: (msg) => secondary(msg),
    tertiary: (msg) => tertiary(msg),
    neutral: (msg) => neutral(msg),
    emphasis: (msg) => emphasis(msg),
    success: (msg) => success(msg)
};
