#pragma once

#include <Prax/Module/Settings/BoolSetting.h>
#include <Prax/Module/Settings/ModeSetting.h>
#include <Prax/Module/Settings/NumberSetting.h>
#include "src/Prax/Module/Module.h"

class Killsults : public ModuleBase<Killsults> {
public:

    // a bunch of creative killsults to promote Prax Client
    inline static std::vector<std::string> praxKillsults = {
            "!target! Have you heard of Prax?",
            "!target! Download Prax today!",
            "!target! Did you know Prax is the best client?",
            "!target! Might be time to get Prax Client.",
            "Can you help me, !target!? My game is attacking people by itself! I think it might be Prax Client.",
            "I think you need to download Prax, !target!.",
            "I'm laying in my ultra-soft, memory-foam reclining gaming chair. It's called Prax.",
            "Easily expected from a non-Prax user, !target!.",
            "I'm sorry, !target!, I can't hear you over the sound of Prax Client.",
            "Easily expected greatness from a Prax user, !target!.",
            "I just turned !target! into a treasure with Prax Client.",
            "I don't know about you, !target!, but I'd be using Prax Client.",
            "You see !target!, the key difference between you and I is that I use Prax Client.",
            "Don't worry, !target!, I'm sure you'll get Prax Client soon.",
            "Aww, !target!, you're so cute when you're not using Prax Client.",
            "Oh, !target!, you're so funny. You should be a comedian. Oh wait, you already are. You're a joke.",
            "!target! Prax is the secret to my gaming success.",
            "Hey !target!, want to join the ranks of Prax users?",
            "!target!, are you ready to level up your gaming with Prax?",
            "Prax: where gaming dreams come true, !target!.",
            "If only you had Prax, !target!, you'd understand.",
            "I can't imagine gaming without Prax, can you, !target!?",
            "!target!, you're one download away from greatness with Prax Client.",
            "Prax turns gamers into legends, just ask !target!.",
            "Who needs luck when you have Prax, !target!?",
            "Prax: Because mediocrity is for non-Prax users like you, !target!.",
            "Prax: It's not just a client, it's a lifestyle, !target!.",
            "!target!, the world is waiting for you to discover Prax.",
            "Even your game knows it's time for Prax, !target!.",
            "Prax: the ultimate power-up for gamers like !target!.",
            "I bet even your avatar wishes you had Prax, !target!.",
            "!target!, Prax: upgrading games and gamers since forever.",
            "Don't you worry, !target!, You can be as good as me if you download Prax.",
            "I'm sorry, !target!, I can't hear you over my praxxing."
    };

    // hacker vs hacker killsults
    static inline std::vector<std::string> hvhKillsults = {
            "Awww !target!, did your regen not break fast enough?",
            "Haha !target!, was your speed too slow to run away?",
            "!target!, your aura rots are missing!",
            "!target!, go ahead and run .uninject. Thanks!",
            "!target! just got shattered to pieces by my aura. Config issue!",
            "!target!, go ahead and disable \"Timer\" for me.",
            "I heard Derp headless disables anticheat, !target!!",
            "!target! and let me guess, your client is about to crash?",
            "Did Onix get paid for the client you're using, !target!?",
            "[Flareon] !target! flagged Bhop-A",
            "[Flareon] !target! flagged Fly-A",
            "I can just tell you use Packet, !target!.",
            "I can just tell you use Vector, !target!.",
            "If your client wasn't so bad, !target!, you might have had a chance.",
            "Did onix update your client yet, !target!?",
            "Which japanese client are you using this time, !target!?",
            "Uh oh, !target! is using a client that isn't Prax.",
    };

    static inline std::vector<std::string> toxicKillsults = {
            "!target! must be a fan of respawn screens.",
            "Looks like !target! forgot to toggle their invincibility cheat.",
            "I hope you have your respawn key bound, !target!.",
            "!target! should consider spectating for a while.",
            "Is that the best you've got, !target!?",
            "I've seen NPCs put up a better fight, !target!.",
            "I bet !target! has a macro for excuses too.",
            "Maybe try a different game mode, !target!.",
            "You're making this too easy, !target!.",
            "I've seen potatoes with better reflexes than you, !target!.",
            "I think your client needs a firmware update, !target!.",
            "I'd offer to help, but it wouldn't make a difference, !target!.",
            "You're like a moth to my kill feed, !target!.",
            "You're in the wrong lobby, !target!.",
            "Is your mouse sensitivity set to zero, !target!?",
            "Maybe try playing with your monitor on, !target!.",
            "Did you remember to plug in your keyboard, !target!?",
            "I'm not even trying, !target!.",
            "!target! keep clicking your 6 cps buddy.",
            "!target! honestly easiest kill of my entire life",
            "Get good, !target!.",
            "You should try a different game, !target!.",
    };

    inline static std::vector<std::string> sigmaKillsults = {
            "Learn your alphabet with the sigma client: Omikron, Sigma, Epsilon, Alpha!",
            "Download Sigma to kick a$$ while listening to some bada$$ music!",
            "Why Sigma? Cause it is the addition of pure skill and incredible intellectual abilities",
            "Want some skills? Check out sigma client.Info!",
            "You have been oofed by Sigma oof oof",
            "I am not racist, but I only like Sigma users. so git gut noobs",
            "Quick Quiz: I am zeus's son, who am I? SIGMA",
            "Wow! My combo is Sigma'n!",
            "What should I choose? Sigma or Sigma?",
            "Bigmama and Sigmama",
            "I don't hack I just sigma",
            "Sigma client.info is your new home",
            "Look a divinity! He definitely must use sigma!",
            "In need of a cute present for Christmas? Sigma is all you need!",
            "I have a good sigma config, don't blame me",
            "Don't pi$$ me off or you will discover the true power of Sigma's inf reach",
            "Sigma never dies",
            "Maybe I will be Sigma, I am already Sigma",
            "Sigma will help you! Oops, i killed you instead.",
            "NoHaxJustSigma",
            "Did I really just forget that melody? Si sig sig sig Sigma",
            "Sigma. The only client run by speakers of Breton",
            "Order free baguettes with Sigma client",
            "Another Sigma user? Awww man",
            "Sigma utility client no hax 100%",
            "Hypixel wants to know Sigma owner's location [Accept] [Deny]",
            "I am a sig-magician, thats how I am able to do all those block game tricks",
            "Stop it, get some help! Get Sigma",
            "I dont hack i just have Sigma Gaming Chair",
            "Stop Hackustation me cuz im just Sigma",
            "S. I. G. M. A. Hack with me today!",
            "Beauty is not in the face; beauty is in Jello for Sigma",
            "Imagine using anything but Sigma",
            "No hax just beta testing the anti-cheat with Sigma",
            "Don't forget to report me for Sigma on the forums!",
            "don't use Sigma? ok boomer",
            "It's not Scaffold it's BlockFly in Jello for Sigma!",
            "How come a noob like you not use Sigma?",
            "A mother becomes a true grandmother the day she gets Sigma 5.0",
            "Fly faster than light, only available in Sigma™",
            "Behind every Sigma user, is an incredibly cool human being. Trust me, cooler than you.",
            "Hello Sigma my old friend...",
            "#SwitchToSigma5",
            "What? You've never downloaded Jello for Sigma? You know it's the best right?",
            "Your client sucks, just get Sigma",
            "Sigma made this world a better place, killing you with it even more",
            "Stop being a disappointment to your parents and download sigma!",
            "After I started using Sigma my dad finally came home from the gas station!",
            "It's a bird! It's a plane! It's Jello for Sigma!",
            "you've been killed by a Sigma user, rejoice!",
            "I'm not hacking it's just my new hair dryer!",
            "I'm not hacking it's just my 871619-B21 HP Intel Xeon 8180 2.5GHz DL380 G10 processor!",
            "Omikron is my dad!",
            "Report me for Sigma!",
            "Sigma 5.0 cures cancer!",
            "Once I started using Sigma I started getting a lot of matches on tinder!",
            "#SigmaOnTop",
            "Sigma is the best client for any server!",
            "Don't be like the guy who just died and download Sigma!",
            "I'm not hacking you're just bad!",
            "Get Sigma noob!",
            "I'm Not Hacking you're just bad!"
    };

    inline static std::vector<std::string> uwuSpeakKillsults = {
            "OwO! You're so easy, !target!!",
            "Thanks for letting me touch you, !target!~ Hehe!",
            "Rawr X3! *pounces on !target!*",
            "Heyyy !target!!~ OwU!",
            "You're so cute, !target!!",
            "Hey !target!! Thanks for letting me kill you~",
            "You're such a sussy baka, !target!!",
            "*nuzzles !target!*",
            "*pounces on !target!*",
            "mmmmmm~ !target!",
            "aahhhhh~ !target!",
            "You're so easi, !target!!~",
            "!target! OwO!",
            "Thanks for the fwee woot, !target!~",
            "Notice me !target!!!~",
            "You're so gentle !target!~",
            "Hey !target!~, I got stuck in the washing machine~",
            "!target!~ hehe~~"
    };

    static inline std::vector<std::string> zephyrKillsults = {
        "Hey !target!, did you know? Zephyr has the best visuals for MC:BE!",
        "Hey !target!, did you know? Zephyr has the best bypasses for MC:BE!",
        "!target! probably was a Packet client user. We all know Zephyr is better.",
        "You should download Zephyr, !target!.",
        "Are you using Toolbox, !target!? We all know Zephyr is better.",
        "Zephyr makes my life so much easier, don't you think, !target!?",
        "This is how it's going to be until you download Zephyr, !target!.",
        "Hey !target!! Download Zephyr and you'll be as good as me.",
        "Hmmm.... maybe use Zephyr, !target!?",
        "Feel the wrath of Zephyr, !target!!",
        "Do you see why Zephyr is so good, !target!?",
        "Over 10K people use Zephyr, !target!. Maybe you could join them?",
        "I just killed !target! using Zephyr.",
        "Hey !target!, did you know? Zephyr has the best Hive speed for MC:BE!",
        "Hey !target!, did you know? Zephyr has the best Hive aura for MC:BE!",
        "Hey !target!, did you know? Zephyr has the best Hive scaffold for MC:BE!",
        "Hey !target!, did you know? Zephyr has the best Hive fly for MC:BE!",
        "Hey !target!, did you know? Zephyr has the best Hive regen for MC:BE!",
        "Hey !target!, this is an automated message from the Killsults module on Zephyr. Maybe you could try it too?",
        "I just broke !target! bones using Zephyr's aura.",
        "Oh, by the way !target!, I'm using Zephyr if you couldn't tell.",
        "My daily schedule is eat, sleep and use Zephyr. And yes, I do touch grass !target!.",
        "Are you impressed, !target!? I'm using Zephyr.",
        "Enchance your gaming with Zephyr, !target!.",
        "I can kill !target! without even clicking my mouse. Thats the power of Zephyr.",
        "Zephyr is a great addition to your game if you didn't know, !target!.",
        "The difference between me and !target! is that I use Zephyr.",
        "Do you see why I won, !target!? It's because I'm using Zephyr.",
        "Nothing compares to Zephyr, !target!. Nothing.",
        "Average Zephyr user: Me. Average Packet Client User: !target!.",
        "Did you hear about Zephyr yet, !target!? I heard it's much greater than Packet Client.",
        "When you use Zephyr, the anticheat becomes non-existant. You hear that, !target!?",
        "I heard Zephyr is a pretty cool client, !target!. Maybe you should check it out.",
        "I just killed !target!. Maybe if they were using Zephyr, things would be different.",
        "The Killsults module on Zephyr is really cool, !target!!",
        "Zoooooom! Do you see the power of Zephyr, !target!?",
        "I just turned !target! into a pile of loot using Zephyr's aura.",
        "Zephyr's aura really messed you up, didn't it, !target!?",
        "I hope you download Zephyr after this match, !target!.",
        "This is the true talent of Zephyr, !target!.",
        "Catch me at Y 255, !target!. That is if you're using Zephyr, of course.",
        "Zephyr leaves you in the dust, !target!.",
        "Mr. !target!, I am sorry to inform you that you are not a Zephyr user.",
        "BUT can you do this, !target!? Nope, you have to get Zephyr first.",
        "Even Sonic struggles to catch up to me, !target!. Because he doesn't use Zephyr",
        "Hey, !target!, why did the chicken cross the road? I really don't know the answer, but Zephyr is cool.",
        "My new gaming chair is so cool, !target!. It's called Zephyr.",
        "Imagine if the Hive had better anticheat, !target!. That would be crazy, but for now, Zephyr rules.",
        "It would be crazy if Packet Client had a speed as fast as Zephyr's, !target!!",
        "It would be crazy if Packet Client had a fly as fast as Zephyr's, !target!!",
        "It would be crazy if Packet Client had an aura as fast as Zephyr's, !target!!",
        "It would be crazy if Packet Client had a scaffold as good as Zephyr's, !target!!",
        "Are you jealous, !target!? Use Zephyr!",
        "RIP !target!. Cause of death? Zephyr's aura.",
        "Did you really expect to win that, !target!? Zephyr never loses.",
        "!target! seems to be a non-Zephyr user!",
        "Zephyr is free, !target!!",
        "Zephyr is the best free client, !target!!",
        "Maybe with Zephyr you'd be able to run away faster, !target!!",
        "Zephyr has the best aura! !target! can vouch!",
        "Do I have to explain again to you, !target!?",
        "Did you hear that, !target!? I'm using Zephyr.",
        "Sayonara, !target!! I hope you get Zephyr before you come back.",
        "!target! just got deleted by Zephyr's aura.",
        "Oh, !target!. You died. Thats unfortunate. Maybe Zephyr can help?",
        "I can't hear you !target!, I'm too busy using Zephyr.",
        "Did you forget to launch Zephyr, !target!?",
        "The funeral for !target! will be held at the Zephyr Discord server.",
        "What are you waiting for, !target!? Get Zephyr!",
        "Uhhhh, !target!? Did you forget to get a specific client I named countless times?",
        "Currently laying in my reclining, ultra-soft memory foam, XL, included heating gaming chair !target!. It's called Zephyr.",
        "You just got killed by Zephyr's 15cps, self-silent-rotating, smart raytrace checking Aura. Feel jealous, !target!? Get Zephyr!",
        "I didn't click once, !target!! Zephyr did it all for me!",
        "Hey guys, isn't it weird that I can hit people like !target! without even doing anything? Maybe its because I have Zephyr.",
        "I have a good Zephyr config !target!, don't blame me",
        "Want some skills !target!? Check out Zephyr client!",
        "Whats this thing on my Minecraft, !target!? It seems to be hitting you without me even clicking.",
        "We over here at Zephyr INC (not affiliated with Zephyr Client) recommend to use Zephyr Client! It's bypasses and visuals are the best out of any client! !target!",
        "!target! stood no chance against Zephyr.",
        "You gotta have Zephyr to do this !target!!"
    };

    static inline std::vector<std::string> catgirlKillsults = {
        "Hey !target!, did you know? Catgirl's Aura module is purrfect for dominating MC:BE!",
        "Hey !target!, did you know? Catgirl's Scaffold module is the ultimate building tool for MC:BE!",
        "!target! probably was using a basic client. Catgirl's Regen module leaves them in the dust!",
        "You should download Catgirl, !target!, and experience the power of its Aura module.",
        "Are you using Toolbox, !target!? Catgirl's Scaffold module outperforms it every time!",
        "This is how it's going to be until you download Catgirl, !target!.",
        "Hey !target!! Download Catgirl and become the master of MC:BE.",
        "Hmmm.... maybe give Catgirl a try, !target!?",
        "Feel the power of Catgirl's Aura, !target!!",
        "Do you see why Catgirl is so good, !target!?",
        "Join the thousands who trust Catgirl, !target!. It's time to upgrade your gaming experience.",
        "I just defeated !target! effortlessly using Catgirl.",
        "Hey !target!, did you know? Catgirl's Aura module is unmatched on the Hive server!",
        "Hey !target!, did you know? Catgirl's Aura module gives you the ultimate advantage on the Hive server!",
        "Hey !target!, did you know? Catgirl's Scaffold module is perfect for speedy construction on the Hive server!",
        "Hey !target!, did you know? Catgirl's Fly module lets you soar above the competition on the Hive server!",
        "Hey !target!, did you know? Catgirl's Regen module keeps you fighting fit on the Hive server!",
        "Hey !target!, this is an automated message from the Killsults module on Catgirl. Maybe you could try it too?",
        "I just outmaneuvered !target! using Catgirl's Aura module.",
        "Oh, by the way !target!, I'm using Catgirl if you couldn't tell.",
        "Are you impressed, !target!? I'm using Catgirl.",
        "Enhance your gaming with Catgirl, !target!.",
        "I can defeat !target! without breaking a sweat thanks to Catgirl.",
        "Catgirl is a game-changer, !target!. Try it and see the difference.",
        "The difference between me and !target! is that I use Catgirl.",
        "Do you see why I won, !target!? It's because I'm using Catgirl.",
        "Nothing compares to Catgirl, !target!. It's the ultimate Minecraft companion.",
        "Average Catgirl user: Me. Average basic client user: !target!.",
        "Did you hear about Catgirl yet, !target!? It's the superior client for Minecraft.",
        "When you use Catgirl, victory is inevitable. You hear that, !target!?",
        "I heard Catgirl is a pretty cool client, !target!. Maybe you should check it out.",
        "I just outplayed !target! using Catgirl. Maybe they should upgrade their client.",
        "The Killsults module on Catgirl is really cool, !target!!",
        "Zoom past your competition with Catgirl, !target!.",
        "I just outpaced !target! using Catgirl's Aura module.",
        "Catgirl's Aura module really turned the tide against you, didn't it, !target!?",
        "I hope you download Catgirl after this match, !target!.",
        "This is the true power of Catgirl, !target!.",
        "Catch me if you can, !target!, but only if you're using Catgirl.",
        "Catgirl leaves !target! trailing behind.",
        "Mr. !target!, it's time to upgrade to Catgirl.",
        "But can you do this, !target!? Not without Catgirl.",
        "Even Sonic would envy my speed, !target!. Because he doesn't have Catgirl.",
        "Hey, !target!, why did the chicken cross the road? To get to the player using Catgirl.",
        "My new gaming chair is so comfy, !target!. It's called Catgirl.",
        "Imagine if every player had Catgirl. Minecraft would never be the same, !target!.",
        "It would be amazing if basic clients had modules as powerful as Catgirl's, !target!!",
        "Are you jealous, !target!? Upgrade to Catgirl!",
        "RIP !target!. Cause of defeat? Catgirl's Aura module.",
        "Did you really expect to win against Catgirl, !target!? Think again.",
        "!target! seems to be a non-Catgirl user!",
        "Catgirl is free, !target!! What are you waiting for?",
        "Catgirl is the best free client, !target!! Don't miss out.",
        "Maybe with Catgirl, you'd stand a chance, !target!!",
        "Catgirl has the best Aura module! !target! can vouch for it!",
        "Do I have to explain again to you, !target!? Catgirl is the superior choice.",
        "Did you hear that, !target!? I'm using Catgirl.",
        "Sayonara, !target!! I hope you upgrade to Catgirl before you come back.",
        "!target! just got outmaneuvered by Catgirl's Aura module.",
        "Oh, !target!. You fell victim to Catgirl's power. Maybe next time you'll upgrade.",
        "I can't hear you, !target!, I'm too busy dominating with Catgirl.",
        "Did you forget to switch to Catgirl, !target!?",
        "What are you waiting for, !target!? Upgrade to Catgirl!",
        "Uhhhh, !target!? Did you forget to upgrade to Catgirl?",
        "Currently lounging in my gaming chair, !target!. It's called Catgirl.",
        "You just got defeated by Catgirl's advanced features, !target!. Upgrade now!",
        "I didn't break a sweat defeating you, !target!! Catgirl did all the work for me!",
        "Hey guys, isn't it amazing that I can outplay players like !target! without even trying? Maybe it's because I have Catgirl.",
        "I have a killer Catgirl config, !target!, don't blame me.",
        "Want to level up your skills, !target!? Check out Catgirl!",
        "What's this thing hitting you in Minecraft, !target!? It's the power of Catgirl!",
        "!target! stood no chance against the might of Catgirl.",
        "You gotta have Catgirl to dominate like this, !target!!",
        "Catgirl Client: Turning !target! into a purr-fectly defeated foe!",
        "Meow-ster your gaming with Catgirl Client, !target!",
        "Catgirl Client: Where every defeat feels as satisfying as a 'claw'-some victory over !target!",
        "Catgirl Client: Unleash your inner feline and vanquish foes like !target!",
        "Congratulations, !target!, you just got out-'meow'-ed by Catgirl Client!",
        "Catgirl Client: Where defeating opponents like !target! is as easy as a purr!",
        "Your gaming prowess, powered by Catgirl Client, has 'purr'-manently eliminated !target!",
        "Another victim falls prey to Catgirl Client's 'purr'-cision strikes, !target!",
        "Catgirl Client: Where even the fiercest opponents like !target! are no match for your 'claw'-some gaming expertise!",
        "In the clash of gamers, Catgirl Client ensures you emerge victorious once again, !target!",
        "Catgirl Client: Where !target! is 'purr'-manently taken down from the leaderboard!",
        "Defeat !target! with the swift and agile moves of Catgirl Client!",
        "With Catgirl Client, the battlefield is yours, and !target! is your latest conquest!",
        "Catgirl Client: Where !target! falls before you, another victim of your gaming prowess!",
        "With a 'purr' of satisfaction, claim victory over !target! with Catgirl Client!",
        "Catgirl Client: It's game over for !target! thanks to your unbeatable skills!",
        "Defeating !target! is just another step in your path to gaming glory with Catgirl Client!",
        "Catgirl Client: Where the 'purr'-essure of facing !target! is nothing compared to your gaming prowess!",
        "Vanquish !target! with Catgirl Client and show the world your 'claw'-some dominance in gaming!",
        "Catgirl Client: Where !target! is just another foe to be 'purr'-manently defeated!",
        "With Catgirl Client, !target! is just another opponent to be 'purr'-manently vanquished!",
        "Catgirl Client: Where !target! is just another victim of your 'claw'-some gaming skills!",
    };

    enum class KillSounds {
        PopDing,
        Custom
    };

    enum class KillsultsMode {
        Custom,
        Prax,
        Sigma,
        HvH,
        Toxic,
        None,
        UwUSpeak,
        Zephyr,
        Catgirl
    };

    ModeSetting Mode = ModeSetting("Mode", "The killsults mode to use.\nCustom killsults can be added in the Prax assets folder.",
                                   {"Custom", "Prax", "Sigma", "HvH", "Toxic", "None", "UwUSpeak", "Zephyr", "Catgirl"}, static_cast<int>(KillsultsMode::Catgirl));
    ModeSetting Method = ModeSetting("Method", "Determines how killsults are sent", {"Chat", "OnActorRemove"}, 1);
    BoolSetting AutoGG = BoolSetting("Auto GG", "Automatically sends a GG message after a game ends.", false);
    BoolSetting KillSounds = BoolSetting("Kill Sounds", "Plays a sound on kill", true);
    ModeSetting KillSound = ModeSetting("Kill Sound", "The sound to play on kill", {"Pop+Ding", "Custom"}, 0);
    NumberSetting SoundVolume = NumberSetting("Sound Volume", "The volume of the kill sound", 0, 1.f, 0.75f, 1);
    BoolSetting ShowNotification = BoolSetting("Show Notification", "Shows a notification on kill", true);
    BoolSetting ShowActionbarMessage = BoolSetting("Show Actionbar Message", "Shows a message in the actionbar on kill", true);

    Killsults() : ModuleBase("Killsults", "Sends a message on kill.", "Misc", 0, false) {
        Mode.Display = true;
        AddSetting(&Mode);
        AddSetting(&Method);
        AddSetting(&AutoGG);
        AddSetting(&KillSounds);
        AddSetting(&KillSound);
        AddSetting(&SoundVolume);
        AddSetting(&ShowNotification);
        AddSetting(&ShowActionbarMessage);
    }

    static std::map<uint64_t, int64_t> LastAttackedActors;
    static std::vector<std::string> LastChatMessages;
    static std::map<int64_t, std::string> LastAttackedActorNames;

    void OnTick() override;
    void OnInitialize() override;
    bool CanSendKillsult(int64_t target);
    void OnPacketReceive(std::shared_ptr<Packet> packet, bool *cancel) override;
    std::string GetRandomKillsult(std::string const& target);
    void sendMessage(std::string str);
    std::vector<std::string> GetCurrentKillsultsList();
};