// @ts-check

const colorCodes = {
    Reset: "\x1b[0m",
    Bright: "\x1b[1m",
    Dim: "\x1b[2m",
    Underscore: "\x1b[4m",
    Blink: "\x1b[5m",
    Reverse: "\x1b[7m",
    Hidden: "\x1b[8m",

    FgBlack: "\x1b[30m",
    FgRed: "\x1b[31m",
    FgGreen: "\x1b[32m",
    FgYellow: "\x1b[33m",
    FgBlue: "\x1b[34m",
    FgMagenta: "\x1b[35m",
    FgCyan: "\x1b[36m",
    FgWhite: "\x1b[37m",
    FgGray: "\x1b[90m",

    BgBlack: "\x1b[40m",
    BgRed: "\x1b[41m",
    BgGreen: "\x1b[42m",
    BgYellow: "\x1b[43m",
    BgBlue: "\x1b[44m",
    BgMagenta: "\x1b[45m",
    BgCyan: "\x1b[46m",
    BgWhite: "\x1b[47m",
    BgGray: "\x1b[100m",
};

/**
 * @param {string} text
 * @param {"red" | "bright"| "dim"| "underscore" | "blink" | "reverse" | "hidden" | "black" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray"} [type]
 * @param {boolean} [bg]
 * @returns {string}
 */
function colors(text, type, bg) {
    let finalText = ``;

    switch (type) {
        case "red":
            finalText += bg ? colorCodes.BgRed : colorCodes.FgRed;
            break;
        case "green":
            finalText += bg ? colorCodes.BgGreen : colorCodes.FgGrBgGreen;
            break;
        case "blue":
            finalText += bg ? colorCodes.BgBlue : colorCodes.FgGrBgBlue;
            break;

        default:
            finalText += colorCodes.Bright;
            break;
    }
    finalText += `${text}${colorCodes.Reset}`;
    console.log("finalText", finalText);

    return finalText;
}

module.exports = colors;
