#include "../worlddb.h"
#include "../../common/database_schema.h"

void WorldserverCLI::MercsEnable(int argc, char **argv, argh::parser &cmd, std::string &description)
{
	description = "Enables mercenaries";

	if (cmd[{"-h", "--help"}]) {
		return;
	}

	// bootstrap merc tables if they don't exist
	if (!database.DoesTableExist("merc_types")) {
		LogInfo("Bootstrapping merc tables");
		database.SourceSqlFromUrl(
			"https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/merc_tables_bootstrap.sql"
		);
	}
	else {
		LogInfo("Merc tables already exist, skipping bootstrap");
	}

	uint32 expansions_setting        = RuleManager::Instance()->GetIntRule(RuleManager::Int__ExpansionSettings);
	uint32 expansions_setting_before = expansions_setting;
	bool   update_expansions         = false;

	if (expansions_setting != -1 && !(expansions_setting & EQ::expansions::ExpansionBitmask::bitSoD)) {
		expansions_setting += EQ::expansions::ExpansionBitmask::bitSoD;
		update_expansions = true;
	}

	LogInfo("Enabling Mercenaries");
	LogInfo("Setting rule Mercs:AllowMercs to true");
	RuleManager::Instance()->SetRule("Mercs:AllowMercs", "true", &database, true, true);

	if (update_expansions) {
		LogInfo(
			"Updating World:ExpansionSettings from [{}] to [{}] to enable Mercenary Liaison spawns",
			expansions_setting_before,
			expansions_setting
		);

		RuleManager::Instance()->SetRule(
			"World:ExpansionSettings",
			std::to_string(expansions_setting),
			&database,
			true,
			true
		);
	}

	LogInfo("Mercenaries enabled");
}
