package com.owlmaddie.utils;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * The {@code Randomizer} class provides easy functions for generating a variety of different random numbers
 * and phrases used by this mod.
 */
public class Randomizer {
    public enum RandomType { NO_RESPONSE, ERROR, ADJECTIVE, FREQUENCY }
    private static List<String> noResponseMessages = Arrays.asList(
            "<no response>",
            "<silence>",
            "<stares>",
            "<blinks>",
            "<looks away>",
            "<sighs>",
            "<shrugs>",
            "<taps foot>",
            "<yawns>",
            "<examines nails>",
            "<whistles softly>",
            "<shifts uncomfortably>",
            "<glances around>",
            "<pretends not to hear>",
            "<hums quietly>",
            "<fiddles with something>",
            "<gazes into the distance>",
            "<smirks>",
            "<raises an eyebrow>",
            "<clears throat>",
            "<peers over your shoulder>",
            "<fakes a smile>",
            "<checks the time>",
            "<doodles in the air>",
            "<mutters under breath>",
            "<adjusts an imaginary tie>",
            "<counts imaginary stars>",
            "<plays with a nonexistent pet>"
    );
    private static List<String> errorResponseMessages = Arrays.asList(
            "Seems like my words got lost in the End. Check out http://discord.creaturechat.com for clues!",
            "Oops! My speech bubble popped. Need help? Visit http://discord.creaturechat.com",
            "I might've eaten a bad Command Block. Help me out at http://discord.creaturechat.com!",
            "My words are on strike. More info? http://discord.creaturechat.com",
            "I think a Creeper blew up my script. Instructions? http://discord.creaturechat.com",
            "BRB, asking a villager for directions to http://discord.creaturechat.com",
            "It’s not you, it’s my API key. Let's regroup at http://discord.creaturechat.com",
            "I tried to speak, but it was a critical miss. Help at http://discord.creaturechat.com",
            "Words are hard. Come chat at http://discord.creaturechat.com",
            "I must've left my responses in my other pants. See http://discord.creaturechat.com",
            "Shh... I’m hiding from an invalid API key. Join the hunt at http://discord.creaturechat.com",
            "I’d tell you, but then I’d have to respawn. Meet me at http://discord.creaturechat.com",
            "Error 404: Response not found. Maybe it’s at http://discord.creaturechat.com?",
            "I'm speechless, literally. Let's troubleshoot at http://discord.creaturechat.com",
            "Looks like my connection got lost in the Nether. Can you help? http://discord.creaturechat.com",
            "I forgot what I was saying, but http://discord.creaturechat.com remembers.",
            "Are my words mining without a pickaxe? Dig up some help at http://discord.creaturechat.com",
            "Sorry, my parrot ate the response. Teach it better at http://discord.creaturechat.com",
            "My magic mirror says: 'Better answers found at http://discord.creaturechat.com'",
            "This message is temporarily out of order. Order yours at http://discord.creaturechat.com"
    );
    private static List<String> characterAdjectives = Arrays.asList(
            "mystical", "fiery", "ancient", "cursed", "ethereal", "clumsy", "stealthy",
            "legendary", "toxic", "enigmatic", "celestial", "rambunctious", "shadowy",
            "brave", "screaming", "radiant", "savage", "whimsical", "positive", "turbulent",
            "ominous", "jubilant", "arcane", "hopeful", "rugged", "venomous", "timeworn",
            "heinous", "friendly", "humorous", "silly", "goofy", "irate", "furious",
            "wrathful", "nefarious", "sinister", "malevolent", "sly", "roguish", "deceitful",
            "untruthful", "loving", "noble", "dignified", "righteous", "defensive",
            "protective", "heroic", "amiable", "congenial", "happy", "sarcastic", "funny",
            "short", "zany", "cooky", "wild", "fearless insane", "cool", "chill",
            "cozy", "comforting", "stern", "stubborn", "scatterbrain", "scaredy", "aloof",
            "gullible", "mischievous", "prankster", "trolling", "clingy", " manipulative",
            "weird", "famous", "persuasive", "sweet", "wholesome", "innocent", "annoying",
            "trusting", "hyper", "egotistical", "slow", "obsessive", "compulsive", "impulsive",
            "unpredictable", "wildcard", "stuttering", "hypochondriac", "hypocritical",
            "optimistic", "overconfident", "jumpy", "brief", "flighty", "visionary", "adorable",
            "sparkly", "bubbly", "unstable", "sad", "angry", "bossy", "altruistic", "quirky",
            "nostalgic", "essentially", "emotional", "enthusiastic", "unusual", "conspirator"
    );
    private static List<String> frequencyTerms = Arrays.asList(
            "always", "frequently", "usually", "often", "sometimes",
            "occasionally", "rarely", "seldom", "almost never", "never"
    );

    // Get random no response message
    public static String getRandomMessage(RandomType messageType) {
        Random random = new Random();
        List<String> messages = null;
        if (messageType.equals(RandomType.ERROR)) {
            messages = errorResponseMessages;
        } else if (messageType.equals(RandomType.NO_RESPONSE)) {
            messages = noResponseMessages;
        } else if (messageType.equals(RandomType.ADJECTIVE)) {
            messages = characterAdjectives;
        } else if (messageType.equals(RandomType.FREQUENCY)) {
            messages = frequencyTerms;
        }

        int index = random.nextInt(messages.size());
        return messages.get(index).trim();
    }

    public static String RandomLetter() {
        // Return random letter between 'A' and 'Z'
        int randomNumber = RandomNumber(26);
        return String.valueOf((char) ('A' + randomNumber));
    }

    public static int RandomNumber(int max) {
        // Generate a random integer between 0 and max (inclusive)
        Random random = new Random();
        return random.nextInt(max);
    }
}