// ===========================================================================
// Vortrex's Roleplay Resource
// https://github.com/VortrexFTW/gtac_roleplay
// ===========================================================================
// FILE: subaccount.js
// DESC: Provides subaccount (character) functions and usage
// TYPE: Server (JavaScript)
// ===========================================================================

function initSubAccountScript() {
	logToConsole(LOG_INFO, "[VRR.SubAccount]: Initializing subaccount script ...");
	logToConsole(LOG_INFO, "[VRR.SubAccount]: SubAccount script initialized!");
}

// ===========================================================================

function loadSubAccountFromName(firstName, lastName) {
	let dbConnection = connectToDatabase();
	if(dbConnection) {
		firstName = escapeDatabaseString(dbConnection, firstName);
		lastName = escapeDatabaseString(dbConnection, lastName);
		let dbQueryString = `SELECT * FROM sacct_main INNER JOIN sacct_svr ON sacct_svr.sacct_svr_sacct=sacct_main.sacct_id AND sacct_svr.sacct_svr_server=${getServerId()} WHERE sacct_name_first = '${firstName}' AND sacct_name_last = '${lastName}' LIMIT 1;`;
		let dbQuery = queryDatabase(dbConnection, dbQueryString);
		if(dbQuery) {
			let dbAssoc = fetchQueryAssoc(dbQuery);
			freeDatabaseQuery(dbQuery);
			return new serverClasses.subAccountData(dbAssoc);
		}
		disconnectFromDatabase(dbConnection);
	}

	return false;
}

// ===========================================================================

function loadSubAccountFromId(subAccountId) {
	let dbConnection = connectToDatabase();
	if(dbConnection) {
		let dbQueryString = `SELECT * FROM sacct_main INNER JOIN sacct_svr ON sacct_svr.sacct_svr_sacct=sacct_main.sacct_id AND sacct_svr.sacct_svr_server=${getServerId()} WHERE sacct_id = ${subAccountId} LIMIT 1;`;
		let dbQuery = queryDatabase(dbConnection, dbQueryString);
		if(dbQuery) {
			let dbAssoc = fetchQueryAssoc(dbQuery);
			freeDatabaseQuery(dbQuery);
			return new serverClasses.subAccountData(dbAssoc);
		}
		disconnectFromDatabase(dbConnection);
	}

	return false;
}

// ===========================================================================

function loadSubAccountsFromAccount(accountId) {
	let tempSubAccounts = [];
	let dbAssoc = false;
	if(accountId > 0) {
		let dbConnection = connectToDatabase();
		if(dbConnection) {
			let dbQueryString = `SELECT * FROM sacct_main INNER JOIN sacct_svr ON sacct_svr.sacct_svr_sacct=sacct_main.sacct_id AND sacct_svr.sacct_svr_server=${getServerId()} WHERE sacct_acct = ${accountId} AND sacct_server = ${getServerId()}`;
			let dbQuery = queryDatabase(dbConnection, dbQueryString);
			if(dbQuery) {
				while(dbAssoc = fetchQueryAssoc(dbQuery)) {
					let tempSubAccount = new serverClasses.subAccountData(dbAssoc);
					if(tempSubAccount.skin == -1) {
						tempSubAccount.skin = getServerConfig().newCharacter.skin;
					}
					tempSubAccounts.push(tempSubAccount);
				}
				freeDatabaseQuery(dbQuery);
			}
			disconnectFromDatabase(dbConnection);
		}
	}

	return tempSubAccounts;
}

// ===========================================================================

function saveSubAccountToDatabase(subAccountData) {
	let dbConnection = connectToDatabase();

	if(dbConnection) {
		let safeClanTag = escapeDatabaseString(dbConnection, subAccountData.clanTag);
		let safeClanTitle = escapeDatabaseString(dbConnection, subAccountData.clanTitle);
		let safeFirstName = escapeDatabaseString(dbConnection, subAccountData.firstName);
		let safeLastName = escapeDatabaseString(dbConnection, subAccountData.lastName);
		let safeMiddleName = escapeDatabaseString(dbConnection, subAccountData.middleName);

		let dbQueryString = `
			UPDATE sacct_main SET
				 sacct_name_first='${safeFirstName}',
				sacct_name_last='${safeLastName}',
				sacct_name_middle='${safeMiddleName}',
				sacct_cash=${subAccountData.cash},
				sacct_when_lastlogin=${subAccountData.lastLogin},
				sacct_pos_x=${subAccountData.spawnPosition.x},
				sacct_pos_y=${subAccountData.spawnPosition.y},
				sacct_pos_z=${subAccountData.spawnPosition.z},
				sacct_angle=${subAccountData.spawnHeading},
				sacct_int=${subAccountData.interior},
				sacct_vw=${subAccountData.dimension},
				sacct_inhouse=${(subAccountData.inHouse > 0) ? getHouseData(subAccountData.inHouse).databaseId : 0},
				sacct_inbusiness=${(subAccountData.inBusiness > 0) ? getBusinessData(subAccountData.inBusiness).databaseId : 0},
				sacct_health=${subAccountData.health},
				sacct_armour=${subAccountData.armour}
			 WHERE sacct_id=${subAccountData.databaseId}`;

		//dbQueryString = dbQueryString.trim();
		dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
		let dbQuery = queryDatabase(dbConnection, dbQueryString);
		freeDatabaseQuery(dbQuery);
		dbQuery = null;

		dbQueryString = `
			UPDATE sacct_svr SET
				 sacct_svr_job=${subAccountData.job},
				sacct_svr_clan=${subAccountData.clan},
				sacct_svr_clan_rank=${subAccountData.clanRank},
				sacct_svr_clan_tag='${safeClanTag}',
				sacct_svr_clan_title='${safeClanTitle}',
				sacct_svr_clan_flags=${subAccountData.clanFlags},
				sacct_svr_scale_x=${subAccountData.pedScale.x},
				sacct_svr_scale_y=${subAccountData.pedScale.y},
				sacct_svr_scale_z=${subAccountData.pedScale.z},
				sacct_svr_skin=${subAccountData.skin},
				sacct_svr_fightstyle=${subAccountData.fightStyle},
				sacct_svr_walkstyle=${subAccountData.walkStyle},
				sacct_svr_hd_part_hair_model=${subAccountData.bodyParts.hair[0]},
				sacct_svr_hd_part_hair_texture=${subAccountData.bodyParts.hair[1]},
				sacct_svr_hd_part_head_model=${subAccountData.bodyParts.head[0]},
				sacct_svr_hd_part_head_texture=${subAccountData.bodyParts.head[1]},
				sacct_svr_hd_part_upper_model=${subAccountData.bodyParts.upper[0]},
				sacct_svr_hd_part_upper_texture=${subAccountData.bodyParts.upper[1]},
				sacct_svr_hd_part_lower_model=${subAccountData.bodyParts.lower[0]},
				sacct_svr_hd_part_lower_texture=${subAccountData.bodyParts.lower[1]},
				sacct_svr_hd_prop_hair_model=${subAccountData.bodyProps.hair[0]},
				sacct_svr_hd_prop_hair_texture=${subAccountData.bodyProps.hair[1]},
				sacct_svr_hd_prop_eyes_model=${subAccountData.bodyProps.eyes[0]},
				sacct_svr_hd_prop_eyes_texture=${subAccountData.bodyProps.eyes[1]},
				sacct_svr_hd_prop_head_model=${subAccountData.bodyProps.head[0]},
				sacct_svr_hd_prop_head_texture=${subAccountData.bodyProps.head[1]},
				sacct_svr_hd_prop_lefthand_model=${subAccountData.bodyProps.leftHand[0]},
				sacct_svr_hd_prop_lefthand_texture=${subAccountData.bodyProps.leftHand[1]},
				sacct_svr_hd_prop_righthand_model=${subAccountData.bodyProps.rightHand[0]},
				sacct_svr_hd_prop_righthand_texture=${subAccountData.bodyProps.rightHand[1]},
				sacct_svr_hd_prop_leftwrist_model=${subAccountData.bodyProps.leftWrist[0]},
				sacct_svr_hd_prop_leftwrist_texture=${subAccountData.bodyProps.leftWrist[1]},
				sacct_svr_hd_prop_rightwrist_model=${subAccountData.bodyProps.rightWrist[0]},
				sacct_svr_hd_prop_rightwrist_texture=${subAccountData.bodyProps.rightWrist[1]},
				sacct_svr_hd_prop_hip_model=${subAccountData.bodyProps.hip[0]},
				sacct_svr_hd_prop_hip_texture=${subAccountData.bodyProps.hip[1]},
				sacct_svr_hd_prop_leftfoot_model=${subAccountData.bodyProps.leftFoot[0]},
				sacct_svr_hd_prop_leftfoot_texture=${subAccountData.bodyProps.leftFoot[1]},
				sacct_svr_hd_prop_rightfoot_model=${subAccountData.bodyProps.rightFoot[0]},
				sacct_svr_hd_prop_rightfoot_texture=${subAccountData.bodyProps.rightFoot[1]}
			 WHERE sacct_svr_sacct=${subAccountData.databaseId} AND sacct_svr_server = ${getServerId()}`;

		dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
		dbQuery = queryDatabase(dbConnection, dbQueryString);
		freeDatabaseQuery(dbQuery);

		disconnectFromDatabase(dbConnection);
    }
}

// ===========================================================================

function createSubAccount(accountId, firstName, lastName) {
	logToConsole(LOG_DEBUG, `[VRR.Account] Attempting to create subaccount ${firstName} ${lastName} in database`);

	let dbConnection = connectToDatabase();
	let dbQuery = false;

	if(dbConnection) {
		firstName = fixCharacterName(firstName);
		lastName = fixCharacterName(lastName);
		let safeFirstName = escapeDatabaseString(dbConnection, firstName);
		let safeLastName = escapeDatabaseString(dbConnection, lastName);

		dbQuery = queryDatabase(dbConnection, `INSERT INTO sacct_main (sacct_acct, sacct_name_first, sacct_name_last, sacct_pos_x, sacct_pos_y, sacct_pos_z, sacct_angle, sacct_cash, sacct_server, sacct_health, sacct_when_made, sacct_when_lastlogin) VALUES (${accountId}, '${safeFirstName}', '${safeLastName}', ${getServerConfig().newCharacter.spawnPosition.x}, ${getServerConfig().newCharacter.spawnPosition.y}, ${getServerConfig().newCharacter.spawnPosition.z}, ${getServerConfig().newCharacter.spawnHeading}, ${getServerConfig().newCharacter.money}, ${getServerId()}, 100, UNIX_TIMESTAMP(), 0)`);
		//if(dbQuery) {
			if(getDatabaseInsertId(dbConnection) > 0) {
				let dbInsertId = getDatabaseInsertId(dbConnection);
				createDefaultSubAccountServerData(dbInsertId, getServerConfig().newCharacter.skin);
				let tempSubAccount = loadSubAccountFromId(dbInsertId);
				return tempSubAccount;
			}
			//freeDatabaseQuery(dbQuery);
		//}
		disconnectFromDatabase(dbConnection);
	}

	return false;
}

// ===========================================================================

function showCharacterSelectToClient(client) {
	getPlayerData(client).switchingCharacter = true;

	if(doesPlayerHaveAutoSelectLastCharacterEnabled(client)) {
		if(getPlayerData(client).subAccounts.length > 0) {
			logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is being auto-spawned as character ID ${getPlayerLastUsedSubAccount(client)}`);
			selectCharacter(client, getPlayerLastUsedSubAccount(client));
			return true;
		}
	}

	if(getServerConfig().useGUI && doesPlayerHaveGUIEnabled(client)) {
		getPlayerData(client).currentSubAccount = 0;
		logToConsole(LOG_DEBUG, `[VRR.SubAccount] Setting ${getPlayerDisplayForConsole(client)}'s character to ID ${getPlayerData(client).currentSubAccount}`);
		let tempSubAccount = getPlayerData(client).subAccounts[0];
		let clanName = (tempSubAccount.clan != 0) ? getClanData(tempSubAccount.clan).name : "None";
		let lastPlayedText = (tempSubAccount.lastLogin != 0) ? `${msToTime(getCurrentUnixTimestamp()-tempSubAccount.lastLogin)} ago` : "Never";
		showPlayerCharacterSelectGUI(client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.cash, clanName, lastPlayedText, tempSubAccount.skin);

		//spawnPlayer(client, getServerConfig().characterSelectPedPosition, getServerConfig().characterSelectPedHeading, getPlayerCurrentSubAccount(client).skin, getServerConfig().characterSelectInterior, getServerConfig().characterSelectDimension);
		//setTimeout(function() {
		//	showCharacterSelectCameraToPlayer(client);
		//}, 500);
		logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is being shown the character select GUI`);
	} else {
		//let emojiNumbers = ["➊", "➋", "➌", "➍", "➎", "➏", "➐", "➑", "➒"];
		//let emojiNumbers = ["①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨"];
		//let emojiNumbers = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣"];
		messagePlayerNormal(client, `You have the following characters. Use /usechar <id> to select one:`, getColourByName("teal"));
		getPlayerData(client).subAccounts.forEach(function(subAccount, index) {
			let tempSubAccount = getPlayerData(client).subAccounts[0];
			let clanName = (tempSubAccount.clan != 0) ? getClanData(tempSubAccount.clan).name : "None";
			let lastPlayedText = (tempSubAccount.lastLogin != 0) ? `${msToTime(getCurrentUnixTimestamp()-tempSubAccount.lastLogin)} ago` : "Never";
			messagePlayerNormal(client, `${index+1} • [#BBBBBB]${subAccount.firstName} ${subAccount.lastName} ($${tempSubAccount.cash}, ${lastPlayedText})`);
		});
		logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is being shown the character select/list message (GUI disabled)`);
	}
}

// ===========================================================================

function checkNewCharacter(client, firstName, lastName) {
	if(areParamsEmpty(firstName)) {
		showPlayerNewCharacterFailedGUI(client, "First name cannot be blank!");
		return false;
	}
	firstName = firstName.trim();

	if(areParamsEmpty(lastName)) {
		showPlayerNewCharacterFailedGUI(client, "Last name cannot be blank!");
		return false;
	}
	lastName = lastName.trim();

	if(doesNameContainInvalidCharacters(firstName) || doesNameContainInvalidCharacters(lastName)) {
		logToConsole(LOG_WARN, `[VRR.Account] Subaccount ${firstName} ${lastName} could not be created (invalid characters in name)`);
		showPlayerNewCharacterFailedGUI(client, "Invalid characters in name!");
		return false;
	}

	let skinId = allowedSkins[getServerGame()][getPlayerData(client).creatingCharacterSkin];

	let subAccountData = createSubAccount(getPlayerData(client).accountData.databaseId, firstName, lastName);
	if(!subAccountData) {
		if(getServerConfig().useGUI && doesPlayerHaveGUIEnabled(client)) {
			showPlayerNewCharacterFailedGUI(client, "Your character could not be created!");
		} else {
			messagePlayerAlert(client, "Your character could not be created!");
		}
		messagePlayerAlert(client, `${getServerName()} staff have been notified of the problem and will fix it shortly.`);
		return false;
	}

	getPlayerData(client).subAccounts = loadSubAccountsFromAccount(getPlayerData(client).accountData.databaseId);
	getPlayerData(client).currentSubAccount = 0;
	getPlayerData(client).creatingCharacter = false;
	let tempSubAccount = getPlayerData(client).subAccounts[0];
	showCharacterSelectToClient(client);
}

// ===========================================================================

function checkPreviousCharacter(client) {
	if(getPlayerData(client).subAccounts.length > 1) {
		if(getPlayerData(client).currentSubAccount <= 0) {
			getPlayerData(client).currentSubAccount = getPlayerData(client).subAccounts.length-1;
		} else {
			getPlayerData(client).currentSubAccount--;
		}

		let subAccountId = getPlayerData(client).currentSubAccount;
		let tempSubAccount = getPlayerData(client).subAccounts[subAccountId];

		let clanName = (tempSubAccount.clan != 0) ? getClanData(tempSubAccount.clan).name : "None";
		let lastPlayedText = (tempSubAccount.lastLogin != 0) ? `${getTimeDifferenceDisplay(tempSubAccount.lastLogin, getCurrentUnixTimestamp())} ago` : "Never";
		showPlayerCharacterSelectGUI(client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.cash, clanName, lastPlayedText, tempSubAccount.skin);

		logToConsole(LOG_DEBUG, `[VRR.SubAccount] Setting ${getPlayerDisplayForConsole(client)}'s character to ID ${getPlayerData(client).currentSubAccount}`);
	}
}

// ===========================================================================

function checkNextCharacter(client) {
	if(getPlayerData(client).subAccounts.length > 1) {
		if(getPlayerData(client).currentSubAccount >= getPlayerData(client).subAccounts.length-1) {
			getPlayerData(client).currentSubAccount = 0;
		} else {
			getPlayerData(client).currentSubAccount++;
		}

		let subAccountId = getPlayerData(client).currentSubAccount;
		let tempSubAccount = getPlayerData(client).subAccounts[subAccountId];

		let clanName = (tempSubAccount.clan != 0) ? getClanData(tempSubAccount.clan).name : "None";
		let lastPlayedText = (tempSubAccount.lastLogin != 0) ? `${getTimeDifferenceDisplay(tempSubAccount.lastLogin, getCurrentUnixTimestamp())} ago` : "Never";
		showPlayerCharacterSelectGUI(client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.cash, clanName, lastPlayedText, tempSubAccount.skin);

		logToConsole(LOG_DEBUG, `[VRR.SubAccount] Setting ${getPlayerDisplayForConsole(client)}'s character to ID ${getPlayerData(client).currentSubAccount}`);
	}
}

// ===========================================================================

function selectCharacter(client, characterId = -1) {
	logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} character select called (Character ID ${characterId})`);
	if(characterId != -1) {
		logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} provided character ID (${characterId}) to spawn with`);
		getPlayerData(client).currentSubAccount = characterId;
	}

	showPlayerCharacterSelectSuccessGUI(client);

	let spawnPosition = getPlayerCurrentSubAccount(client).spawnPosition;
	let spawnHeading = getPlayerCurrentSubAccount(client).spawnHeading;
	let spawnInterior = getPlayerCurrentSubAccount(client).interior;
	let spawnDimension = getPlayerCurrentSubAccount(client).dimension;
	let skin = getPlayerCurrentSubAccount(client).skin;

	getPlayerData(client).switchingCharacter = false;

	logToConsole(LOG_DEBUG, `[VRR.SubAccount] Spawning ${getPlayerDisplayForConsole(client)} as character ID ${getPlayerData(client).currentSubAccount} with skin ${skin} (${spawnPosition.x}, ${spawnPosition.y}, ${spawnPosition.z})`);
	//setPlayerCameraLookAt(client, getPosBehindPos(spawnPosition, spawnHeading, 5), spawnPosition);
	getPlayerData(client).pedState = VRR_PEDSTATE_SPAWNING;
	if(getServerGame() == GAME_GTA_IV) {
		spawnPlayer(client, spawnPosition, spawnHeading, skin);
	} else {
		spawnPlayer(client, spawnPosition, spawnHeading, skin, spawnInterior, spawnDimension);
	}
	logToConsole(LOG_DEBUG, `[VRR.SubAccount] Spawned ${getPlayerDisplayForConsole(client)} as character ID ${getPlayerData(client).currentSubAccount} with skin ${skin} (${spawnPosition.x}, ${spawnPosition.y}, ${spawnPosition.z})`);

	setTimeout(function() {
		onPlayerSpawn(client);
	}, 1000);

	getPlayerCurrentSubAccount(client).lastLogin = getCurrentUnixTimestamp();
}

// ===========================================================================

function switchCharacterCommand(command, params, client) {
	logToConsole(LOG_DEBUG, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is requesting to switch characters (current character: ${getCharacterFullName(client)} [${getPlayerData(client).currentSubAccount}/${getPlayerCurrentSubAccount(client).databaseId}])`);
	if(!isPlayerSpawned(client)) {
		logToConsole(LOG_WARN, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is not allowed to switch characters (not spawned)`);
		return false;
	}

	if(isPlayerSwitchingCharacter(client)) {
		logToConsole(LOG_WARN, `[VRR.SubAccount] ${getPlayerDisplayForConsole(client)} is not allowed to switch characters (already in switch char mode)`);
		messagePlayerError(client, "You are already selecting/switching characters!");
		return false;
	}

	getPlayerCurrentSubAccount(client).spawnPosition = getPlayerPosition(client);
	getPlayerCurrentSubAccount(client).spawnHeading = getPlayerHeading(client);
	getPlayerCurrentSubAccount(client).interior = getPlayerInterior(client);
	getPlayerCurrentSubAccount(client).dimension = getPlayerDimension(client);
	getPlayerCurrentSubAccount(client).health = getPlayerHealth(client);
	getPlayerCurrentSubAccount(client).armour = getPlayerArmour(client);

	logToConsole(client, `Saving ${getPlayerDisplayForConsole(client)}'s subaccount (${getCharacterFullName(client)} [${getPlayerData(client).currentSubAccount}/${getPlayerCurrentSubAccount(client).databaseId}] to database`)
	saveSubAccountToDatabase(getPlayerCurrentSubAccount(client));

	resetClientStuff(client);

	client.despawnPlayer();
	getPlayerData(client).switchingCharacter = true;
	//spawnPlayer(client, getServerConfig().characterSelectPedPosition, getServerConfig().characterSelectPedHeading, getPlayerCurrentSubAccount(client).skin, getServerConfig().characterSelectInterior, getServerConfig().characterSelectDimension);
	//showCharacterSelectCameraToPlayer(client);
	showConnectCameraToPlayer(client);
	showCharacterSelectToClient(client);
}

// ===========================================================================

function newCharacterCommand(command, params, client) {
	if(areParamsEmpty(params)) {
		messagePlayerSyntax(client, getCommandSyntaxText(command));
		return false;
	}

	let splitParams = params.split(" ");
	let firstName = splitParams[0];
	let lastName = splitParams[1];

	checkNewCharacter(client, firstName, lastName);
}

// ===========================================================================

function useCharacterCommand(command, params, client) {
	if(!getPlayerData(client).switchingCharacter) {
		messagePlayerError(client, "Use /switchchar to save this character and return to the characters screen first!");
		return false;
	}

	if(areParamsEmpty(params)) {
		messagePlayerSyntax(client, getCommandSyntaxText(command));
		return false;
	}

	let characterId = toInteger(params) || 1;

	selectCharacter(client, characterId-1);
}

// ===========================================================================

function getPlayerLastUsedSubAccount(client) {
	let subAccounts = getPlayerData(client).subAccounts;
	let lastUsed = 0;
	for(let i in subAccounts) {
		if(subAccounts[i].lastLogin > subAccounts[lastUsed].lastLogin) {
			lastUsed = i;
		}
	}
	return lastUsed;
}

// ===========================================================================

function transferCharacterToServer(subAccountDatabaseId, newServerId) {
	quickDatabaseQuery(`UPDATE sacct_main SET sacct_server = ${newServerId}, sacct_skin = ${loadServerConfigFromId(newServerId).newCharacter.skin} WHERE sacct_id = ${subAccountDatabaseId} LIMIT 1;`);
}

// ===========================================================================

function getCharacterFullName(client) {
	return `${getPlayerCurrentSubAccount(client).firstName} ${getPlayerCurrentSubAccount(client).lastName}`;
}

// ===========================================================================

function isPlayerSwitchingCharacter(client) {
	return getPlayerData(client).switchingCharacter;
}

// ===========================================================================

function isPlayerCreatingCharacter(client) {
	return getPlayerData(client).creatingCharacter;
}

// ===========================================================================

function getPlayerCurrentSubAccount(client) {
	if(!getPlayerData(client)) {
		return false;
	}

	let subAccountId = getPlayerData(client).currentSubAccount;
	if(subAccountId == -1) {
		return false;
	}

	return getPlayerData(client).subAccounts[subAccountId];
}

// ===========================================================================

function getClientSubAccountName(client) {
	let subAccountData = getPlayerCurrentSubAccount(client);
	return `${subAccountData.firstName} ${subAccountData.lastName}`;
}

// ===========================================================================

function setFightStyleCommand(command, params, client) {
	if(areParamsEmpty(params)) {
		messagePlayerSyntax(client, getCommandSyntaxText(command));
		return false;
	}

	let fightStyleId = getFightStyleFromParams(params);

	if(!fightStyle) {
		messagePlayerError(client, `That fight style doesn't exist!`);
		messagePlayerError(client, `Fight styles: ${getGameData().fightStyles[getServerGame()].map(fs => fs[0]).join(", ")}`);
		return false;
	}

	setPlayerFightStyle(client, fightStyleId);
	messagePlayerSuccess(client, `Your fight style has been set to ${getGameData().fightStyles[getServerGame()][fightStyleId][0]}`)

	return true;
}

// ===========================================================================

function createDefaultSubAccountServerData(databaseId, thisServerSkin) {
	for(let i = 1 ; i <= 4 ; i++) {
		if(i == getServerId()) {
			let dbQueryString = `INSERT INTO sacct_svr (sacct_svr_sacct, sacct_svr_server, sacct_svr_skin) VALUES (${databaseId}, ${i}, ${thisServerSkin})`;
			quickDatabaseQuery(dbQueryString);
		} else {
			let dbQueryString = `INSERT INTO sacct_svr (sacct_svr_sacct, sacct_svr_server, sacct_svr_skin) VALUES (${databaseId}, ${i}, -1)`;
			quickDatabaseQuery(dbQueryString);
		}
	}
}

// ===========================================================================