#include "../client.h"

void command_killallnpcs(Client *c, const Seperator *sep)
{
	std::string search_string;
	if (sep->arg[1]) {
		search_string = Strings::ToLower(sep->arg[1]);
	}

	int killed_count = 0;

	for (auto &e: entity_list.GetMobList()) {
		auto *entity = e.second;
		if (!entity || !entity->IsNPC()) {
			continue;
		}

		std::string entity_name = Strings::ToLower(entity->GetName());
		if ((!search_string.empty() && entity_name.find(search_string) == std::string::npos) ||
			!entity->IsAttackAllowed(c)) {
			continue;
		}

		entity->Damage(
			c,
			entity->GetHP() + 1000,
			SPELL_UNKNOWN,
			EQ::skills::SkillDragonPunch
		);

		killed_count++;
	}

	if (killed_count) {
		c->Message(
			Chat::White,
			fmt::format(
				"Killed {} NPC{}{}.",
				killed_count,
				killed_count != 1 ? "s" : "",
				(
					!search_string.empty() ?
						fmt::format(
							" that matched '{}'",
							search_string
						) :
						""
				)
			).c_str()
		);
	}
	else {
		c->Message(
			Chat::White,
			fmt::format(
				"There were no NPCs to kill{}.",
				(
					!search_string.empty() ?
						fmt::format(
							" that matched '{}'",
							search_string
						) :
						""
				)
			).c_str()
		);
	}
}
