import random

# lists from https://github.com/alexanderlukanin13/coolname

ADJECTIVES: list[str] = [
    "abiding",
    "able",
    "aboriginal",
    "abstract",
    "accelerated",
    "accomplished",
    "accurate",
    "acoustic",
    "acrid",
    "active",
    "adamant",
    "adaptable",
    "adept",
    "adorable",
    "adventurous",
    "affable",
    "agate",
    "agile",
    "airborne",
    "alluring",
    "almond",
    "aloof",
    "amaranth",
    "amazing",
    "amber",
    "ambitious",
    "ambrosial",
    "amethyst",
    "amiable",
    "amigurumi",
    "amorphous",
    "amphibian",
    "amusing",
    "analytic",
    "ancient",
    "angelic",
    "annoying",
    "antique",
    "apricot",
    "aquamarine",
    "aquatic",
    "arboreal",
    "arcane",
    "archetypal",
    "armored",
    "aromatic",
    "arrogant",
    "artichoke",
    "asparagus",
    "aspiring",
    "astonishing",
    "astute",
    "athletic",
    "attentive",
    "attractive",
    "auburn",
    "augmented",
    "auspicious",
    "authentic",
    "awesome",
    "axiomatic",
    "azure",
    "bald",
    "banana",
    "beautiful",
    "beige",
    "belligerent",
    "beneficial",
    "benevolent",
    "benign",
    "berserk",
    "beryl",
    "bipedal",
    "bizarre",
    "black",
    "blazing",
    "blond",
    "blue",
    "boisterous",
    "bold",
    "bouncy",
    "brainy",
    "brass",
    "brave",
    "brawny",
    "bright",
    "brilliant",
    "bronze",
    "brown",
    "bulky",
    "burgundy",
    "burrowing",
    "busy",
    "calculating",
    "calm",
    "camouflaged",
    "capable",
    "caped",
    "careful",
    "carmine",
    "carrot",
    "cautious",
    "celadon",
    "cerise",
    "certain",
    "cerulean",
    "charcoal",
    "charming",
    "cheerful",
    "cherry",
    "cherubic",
    "chestnut",
    "chirpy",
    "chocolate",
    "chubby",
    "cinnamon",
    "classic",
    "classy",
    "clay",
    "clever",
    "cobalt",
    "cocky",
    "colorful",
    "competent",
    "complex",
    "congenial",
    "conscious",
    "convivial",
    "cooperative",
    "copper",
    "coral",
    "cordial",
    "cornflower",
    "courageous",
    "crafty",
    "crazy",
    "cream",
    "crimson",
    "crouching",
    "cryptic",
    "crystal",
    "cuddly",
    "cunning",
    "curious",
    "curly",
    "curvy",
    "cute",
    "cyan",
    "daffodil",
    "daffy",
    "daft",
    "dainty",
    "dancing",
    "dandelion",
    "dangerous",
    "daring",
    "dark",
    "dashing",
    "dazzling",
    "debonair",
    "defiant",
    "deft",
    "delectable",
    "delicate",
    "delightful",
    "demonic",
    "denim",
    "determined",
    "devious",
    "devout",
    "dexterous",
    "diamond",
    "didactic",
    "diligent",
    "discerning",
    "discreet",
    "divergent",
    "dramatic",
    "dynamic",
    "eager",
    "ebony",
    "eccentric",
    "economic",
    "efficient",
    "eggplant",
    "elastic",
    "elated",
    "electric",
    "elegant",
    "elite",
    "emerald",
    "eminent",
    "enchanted",
    "encouraging",
    "energetic",
    "enigmatic",
    "enlightened",
    "enthusiastic",
    "esoteric",
    "ethereal",
    "evasive",
    "excellent",
    "exotic",
    "expert",
    "exuberant",
    "fabulous",
    "fair",
    "faithful",
    "famous",
    "fanatic",
    "fancy",
    "fantastic",
    "fascinating",
    "fast",
    "fat",
    "fearless",
    "feathered",
    "fervent",
    "festive",
    "fierce",
    "fiery",
    "fine",
    "finicky",
    "flashy",
    "flat",
    "flawless",
    "fluffy",
    "fluorescent",
    "flying",
    "foamy",
    "fortunate",
    "fractal",
    "fragrant",
    "free",
    "fresh",
    "friendly",
    "frisky",
    "functional",
    "funky",
    "funny",
    "furry",
    "futuristic",
    "fuzzy",
    "gabby",
    "gainful",
    "garnet",
    "garrulous",
    "gay",
    "gentle",
    "gifted",
    "ginger",
    "glaring",
    "gleaming",
    "glistening",
    "glittering",
    "glorious",
    "glossy",
    "godlike",
    "golden",
    "gorgeous",
    "graceful",
    "granite",
    "gray",
    "greedy",
    "green",
    "gregarious",
    "grinning",
    "groovy",
    "grumpy",
    "hairy",
    "hallowed",
    "handsome",
    "happy",
    "hasty",
    "heavenly",
    "heavy",
    "helpful",
    "heretic",
    "hidden",
    "hilarious",
    "hissing",
    "holistic",
    "honest",
    "honored",
    "hopeful",
    "hopping",
    "horned",
    "hospitable",
    "hot",
    "hungry",
    "hypersonic",
    "hypnotic",
    "hysterical",
    "icy",
    "idealistic",
    "illegal",
    "illustrious",
    "imaginary",
    "impartial",
    "imperial",
    "impetuous",
    "important",
    "imported",
    "imposing",
    "impossible",
    "impressive",
    "incredible",
    "independent",
    "indigo",
    "industrious",
    "inescapable",
    "infrared",
    "ingenious",
    "innocent",
    "inquisitive",
    "intelligent",
    "interesting",
    "intrepid",
    "invaluable",
    "inventive",
    "invisible",
    "ivory",
    "jade",
    "jasmine",
    "jasper",
    "jolly",
    "jovial",
    "judicious",
    "juicy",
    "jumping",
    "just",
    "keen",
    "khaki",
    "kickass",
    "kind",
    "knowing",
    "laughing",
    "lavender",
    "lean",
    "lemon",
    "liberal",
    "light",
    "lilac",
    "lime",
    "literate",
    "lively",
    "logical",
    "loose",
    "loud",
    "loutish",
    "lovely",
    "loyal",
    "ludicrous",
    "lumpy",
    "lurking",
    "lush",
    "lyrical",
    "macho",
    "magenta",
    "magic",
    "magnetic",
    "magnificent",
    "mahogany",
    "maize",
    "majestic",
    "malachite",
    "manipulative",
    "marigold",
    "maroon",
    "married",
    "marvellous",
    "masked",
    "masterful",
    "mature",
    "mauve",
    "meaty",
    "meek",
    "mellow",
    "melodic",
    "merciful",
    "merry",
    "messy",
    "meteoric",
    "meticulous",
    "mighty",
    "military",
    "mindful",
    "misty",
    "modest",
    "monumental",
    "mottled",
    "muscular",
    "mustard",
    "myrtle",
    "mysterious",
    "natural",
    "naughty",
    "neat",
    "nebulous",
    "neon",
    "nice",
    "nickel",
    "nifty",
    "nimble",
    "nippy",
    "nocturnal",
    "noisy",
    "nonchalant",
    "nondescript",
    "nostalgic",
    "notorious",
    "obedient",
    "observant",
    "ochre",
    "offbeat",
    "olive",
    "olivine",
    "omniscient",
    "onyx",
    "opal",
    "opalescent",
    "optimal",
    "optimistic",
    "orange",
    "orchid",
    "organic",
    "origami",
    "original",
    "orthodox",
    "outgoing",
    "outrageous",
    "outstanding",
    "overjoyed",
    "papaya",
    "paper",
    "passionate",
    "pastel",
    "pastoral",
    "peach",
    "pearl",
    "peculiar",
    "perfect",
    "peridot",
    "perky",
    "persimmon",
    "phenomenal",
    "pink",
    "piquant",
    "pistachio",
    "placid",
    "platinum",
    "poetic",
    "poised",
    "polar",
    "polite",
    "pompous",
    "porcelain",
    "positive",
    "powerful",
    "practical",
    "pragmatic",
    "precious",
    "precise",
    "prehistoric",
    "premium",
    "pretty",
    "primitive",
    "pristine",
    "private",
    "proficient",
    "prompt",
    "prophetic",
    "proud",
    "provocative",
    "prudent",
    "psychedelic",
    "pumpkin",
    "purple",
    "purring",
    "puzzling",
    "quaint",
    "qualified",
    "quantum",
    "quartz",
    "quick",
    "quiet",
    "quirky",
    "quixotic",
    "quizzical",
    "radiant",
    "radical",
    "rainbow",
    "rampant",
    "rapid",
    "rare",
    "raspberry",
    "rational",
    "real",
    "realistic",
    "rebel",
    "red",
    "refined",
    "refreshing",
    "remarkable",
    "resilient",
    "resolute",
    "resourceful",
    "rich",
    "righteous",
    "rigorous",
    "roaring",
    "robust",
    "romantic",
    "rose",
    "rough",
    "rousing",
    "ruby",
    "ruddy",
    "rugged",
    "russet",
    "rustling",
    "saffron",
    "sage",
    "sandy",
    "sapphire",
    "sassy",
    "satisfied",
    "savvy",
    "scarlet",
    "sceptical",
    "screeching",
    "scrupulous",
    "secret",
    "sensible",
    "sepia",
    "serious",
    "sexy",
    "shaggy",
    "shapeless",
    "shiny",
    "shrewd",
    "silent",
    "silky",
    "silver",
    "simple",
    "sincere",
    "singing",
    "skilled",
    "skinny",
    "slick",
    "slim",
    "sloppy",
    "sly",
    "smart",
    "smiling",
    "smoky",
    "smooth",
    "snobbish",
    "sociable",
    "soft",
    "solemn",
    "solid",
    "sophisticated",
    "sparkling",
    "spectacular",
    "spectral",
    "speedy",
    "spicy",
    "spiffy",
    "spiked",
    "spirited",
    "spiritual",
    "splendid",
    "spotted",
    "spry",
    "stalwart",
    "statuesque",
    "steadfast",
    "steady",
    "steel",
    "stereotyped",
    "sticky",
    "stimulating",
    "stirring",
    "stoic",
    "straight",
    "strange",
    "strict",
    "striped",
    "strong",
    "sturdy",
    "stylish",
    "subtle",
    "successful",
    "succinct",
    "sweet",
    "swinging",
    "tacky",
    "tactful",
    "talented",
    "tall",
    "tan",
    "tangerine",
    "tangible",
    "tasteful",
    "taupe",
    "teal",
    "tentacled",
    "terrestrial",
    "tested",
    "thankful",
    "therapeutic",
    "thick",
    "thistle",
    "thoughtful",
    "thundering",
    "tidy",
    "tireless",
    "tomato",
    "topaz",
    "tough",
    "tourmaline",
    "translucent",
    "transparent",
    "tremendous",
    "tricky",
    "true",
    "truthful",
    "tungsten",
    "tunneling",
    "turquoise",
    "tuscan",
    "ubiquitous",
    "ultramarine",
    "ultraviolet",
    "umber",
    "unbiased",
    "uncovered",
    "unique",
    "unnatural",
    "unselfish",
    "unyielding",
    "upbeat",
    "uppish",
    "uptight",
    "urban",
    "utopian",
    "vagabond",
    "vague",
    "valiant",
    "vanilla",
    "vegan",
    "vehement",
    "vengeful",
    "venomous",
    "vermilion",
    "versatile",
    "versed",
    "victorious",
    "vigilant",
    "vigorous",
    "violet",
    "viridian",
    "visionary",
    "vivacious",
    "vivid",
    "voracious",
    "wakeful",
    "wandering",
    "warm",
    "warping",
    "watchful",
    "wealthy",
    "weightless",
    "whimsical",
    "whispering",
    "white",
    "wild",
    "wine",
    "winged",
    "wise",
    "wisteria",
    "witty",
    "wonderful",
    "wondrous",
    "wooden",
    "woodoo",
    "xanthic",
    "yellow",
    "zealous",
    "zippy",
    "zircon",
]

NOUNS: list[str] = [
    "aardwark",
    "aardwolf",
    "adder",
    "agama",
    "agouti",
    "albatross",
    "alligator",
    "alpaca",
    "ammonite",
    "anaconda",
    "angelfish",
    "ant",
    "anteater",
    "antelope",
    "ape",
    "ara",
    "armadillo",
    "asp",
    "auk",
    "avocet",
    "axolotl",
    "baboon",
    "badger",
    "bandicoot",
    "barnacle",
    "barracuda",
    "basilisk",
    "bat",
    "beagle",
    "bear",
    "beaver",
    "bee",
    "beetle",
    "beluga",
    "bettong",
    "binturong",
    "bird",
    "bison",
    "bittern",
    "bloodhound",
    "boa",
    "boar",
    "bobcat",
    "bonobo",
    "boobook",
    "booby",
    "buffalo",
    "bug",
    "bull",
    "bulldog",
    "bullfinch",
    "bullfrog",
    "bullmastiff",
    "bumblebee",
    "bustard",
    "butterfly",
    "buzzard",
    "caiman",
    "camel",
    "capuchin",
    "capybara",
    "caracal",
    "caracara",
    "caribou",
    "carp",
    "cassowary",
    "cat",
    "caterpillar",
    "catfish",
    "centipede",
    "chachalaca",
    "chameleon",
    "chamois",
    "cheetah",
    "chicken",
    "chihuahua",
    "chimpanzee",
    "chinchilla",
    "chipmunk",
    "chital",
    "chowchow",
    "chupacabra",
    "cicada",
    "civet",
    "clam",
    "coati",
    "cobra",
    "cockatoo",
    "cockle",
    "collie",
    "condor",
    "coot",
    "copperhead",
    "corgi",
    "cormorant",
    "coua",
    "coucal",
    "cougar",
    "cow",
    "coyote",
    "crab",
    "crane",
    "crayfish",
    "cricket",
    "crocodile",
    "crow",
    "cuckoo",
    "curassow",
    "cuscus",
    "cuttlefish",
    "dachshund",
    "dalmatian",
    "deer",
    "degu",
    "dingo",
    "dinosaur",
    "doberman",
    "dodo",
    "dog",
    "dogfish",
    "dolphin",
    "donkey",
    "dormouse",
    "dove",
    "dragon",
    "dragonfly",
    "duck",
    "dugong",
    "eagle",
    "earthworm",
    "earwig",
    "echidna",
    "eel",
    "elephant",
    "elk",
    "emu",
    "ermine",
    "falcon",
    "fennec",
    "ferret",
    "finch",
    "firefly",
    "flamingo",
    "flounder",
    "fossa",
    "fox",
    "foxhound",
    "frigatebird",
    "frog",
    "fulmar",
    "galago",
    "gaur",
    "gazelle",
    "gecko",
    "gerbil",
    "gharial",
    "gibbon",
    "giraffe",
    "goat",
    "goldfish",
    "goose",
    "gopher",
    "gorilla",
    "goshawk",
    "grasshopper",
    "grebe",
    "griffin",
    "groundhog",
    "grouse",
    "guan",
    "guillemot",
    "guppy",
    "hamster",
    "hare",
    "harrier",
    "hawk",
    "hedgehog",
    "heron",
    "herring",
    "hippo",
    "hoatzin",
    "hog",
    "honeybee",
    "hornet",
    "horse",
    "hound",
    "hummingbird",
    "husky",
    "hyena",
    "hyrax",
    "ibex",
    "ibis",
    "iguana",
    "impala",
    "inchworm",
    "jacamar",
    "jackal",
    "jackdaw",
    "jackrabbit",
    "jaguar",
    "jaguarundi",
    "jaybird",
    "jellyfish",
    "jerboa",
    "junglefowl",
    "kagu",
    "kakapo",
    "kangaroo",
    "kestrel",
    "kingfisher",
    "kittiwake",
    "kiwi",
    "koala",
    "koel",
    "kudu",
    "labradoodle",
    "labrador",
    "ladybug",
    "leech",
    "lemming",
    "lemur",
    "leopard",
    "limpet",
    "lion",
    "lionfish",
    "lizard",
    "llama",
    "lobster",
    "locust",
    "loon",
    "lori",
    "lorikeet",
    "lynx",
    "lyrebird",
    "macaque",
    "macaw",
    "mackerel",
    "magpie",
    "malamute",
    "malkoha",
    "mamba",
    "mammoth",
    "manatee",
    "mandrill",
    "mantis",
    "manul",
    "markhor",
    "marmoset",
    "marmot",
    "marten",
    "mastiff",
    "mastodon",
    "mayfly",
    "meerkat",
    "millipede",
    "mink",
    "mole",
    "mongoose",
    "mongrel",
    "monkey",
    "moose",
    "mosquito",
    "moth",
    "mouflon",
    "mouse",
    "mule",
    "mushroom",
    "muskox",
    "muskrat",
    "mussel",
    "mustang",
    "myna",
    "narwhal",
    "nautilus",
    "newt",
    "nightingale",
    "numbat",
    "nuthatch",
    "nyala",
    "oarfish",
    "ocelot",
    "octopus",
    "okapi",
    "orangutan",
    "orca",
    "oriole",
    "oryx",
    "ostrich",
    "otter",
    "owl",
    "oxpecker",
    "oyster",
    "panda",
    "panther",
    "parakeet",
    "parrot",
    "partridge",
    "peacock",
    "peccary",
    "pegasus",
    "pelican",
    "penguin",
    "perch",
    "petrel",
    "pheasant",
    "piculet",
    "pig",
    "pigeon",
    "pillbug",
    "platypus",
    "pogona",
    "polecat",
    "pony",
    "poodle",
    "porcupine",
    "porpoise",
    "potoo",
    "prawn",
    "pronghorn",
    "pudu",
    "puffin",
    "pug",
    "puma",
    "python",
    "quail",
    "quetzal",
    "quokka",
    "quoll",
    "rabbit",
    "raccoon",
    "raptor",
    "rat",
    "rattlesnake",
    "raven",
    "reindeer",
    "rhino",
    "ringtail",
    "roadrunner",
    "robin",
    "rook",
    "rooster",
    "rottweiler",
    "salamander",
    "salmon",
    "saluki",
    "sambar",
    "sawfish",
    "sawfly",
    "scallop",
    "scorpion",
    "seagull",
    "seahorse",
    "seal",
    "seriema",
    "serval",
    "shark",
    "sheep",
    "shellfish",
    "shrew",
    "shrimp",
    "sidewinder",
    "silkworm",
    "skink",
    "skua",
    "skunk",
    "skylark",
    "sloth",
    "slug",
    "smilodon",
    "snail",
    "snake",
    "spaniel",
    "sparrow",
    "spider",
    "sponge",
    "spoonbill",
    "squid",
    "squirrel",
    "stallion",
    "starfish",
    "starling",
    "stingray",
    "stoat",
    "stork",
    "sturgeon",
    "sunfish",
    "swallow",
    "swan",
    "swift",
    "swine",
    "taipan",
    "tamarin",
    "tanuki",
    "tapir",
    "tarantula",
    "tarsier",
    "teal",
    "tench",
    "termite",
    "terrier",
    "tiger",
    "toad",
    "tody",
    "tortoise",
    "toucan",
    "toucanet",
    "trogon",
    "trout",
    "tuatara",
    "tuna",
    "turaco",
    "turkey",
    "turtle",
    "uakari",
    "unicorn",
    "urchin",
    "vicugna",
    "viper",
    "vole",
    "vulture",
    "wallaby",
    "walrus",
    "wapiti",
    "warthog",
    "wasp",
    "waxbill",
    "weasel",
    "whale",
    "whippet",
    "wildcat",
    "wildebeest",
    "wolf",
    "wolverine",
    "wombat",
    "woodlouse",
    "woodpecker",
    "worm",
    "wrasse",
    "wren",
    "yak",
    "zebra",
    "zebu",
]


def generate() -> str:
    return f"{random.choice(ADJECTIVES)}-{random.choice(NOUNS)}"


def generate_distinct(count: int) -> list[str]:
    if count > len(ADJECTIVES) * len(NOUNS):
        raise Exception(
            f"cannot generate more than {len(ADJECTIVES) * len(NOUNS)} distinct names"
        )
    if count < len(ADJECTIVES) * len(NOUNS) / 2:
        generated_set: set[str] = set()
        while len(generated_set) < count:
            generated_set.add(generate())
        return sorted(generated_set)

    generated_list: list[str] = []
    for index in range(0, count):
        generated_list.append(
            f"{ADJECTIVES[index // len(NOUNS)]}-{NOUNS[index % len(NOUNS)]}"
        )
    return generated_list
