import { executeQuery, responseMessage } from "~/lib/db";
import { queryStringBuilder } from "~/services/_main";

const itemType = "medievalSword";

async function getSize(itemID) {
	const blade = await executeQuery({
		query: `
		SELECT
			overallLength,
			handleLength,
			guardWidth,
			weight,
			lockSize
		FROM
			med_weap_swords
		WHERE
			itemID=${itemID}`,
	});

	return blade.length === 1
		? blade[0]
		: {
				overallLength: "",
				handleLength: "",
				guardWidth: "",
				weight: "",
				lockSize: 0,
		  };
}

async function getBlade(itemID) {
	const blade = await executeQuery({
		query: `
		SELECT
			steelTypeID,
			bladeLength,
			bladeWidth,
			bladeThickness,
			lockBlade
		FROM
			med_weap_swords
		WHERE
			itemID=${itemID}`,
	});

	return blade.length === 1
		? blade[0]
		: {
				steelTypeID: 0,
				bladeLength: "",
				bladeWidth: "",
				bladeThickness: "",
				lockBlade: 0,
		  };
}

async function getScabbard(itemID) {
	const blade = await executeQuery({
		query: `
		SELECT
			scabbardID,
			lockScabbard
		FROM
			med_weap_swords
		WHERE
			itemID=${itemID}`,
	});

	return blade.length > 0
		? blade[0]
		: {
				scabbardID: 0,
				lockScabbard: 0,
		  };
}

async function patch(itemID, item) {
	// check for record
	const check = await executeQuery({
		query: `select itemID from med_weap_swords where itemID=${itemID}`,
	});

	// insert if missing
	if (check.length === 0) {
		await executeQuery({
			query: `insert into med_weap_swords (itemID) values (${itemID})`,
		});
	}

	let sql = "update med_weap_swords set updatedDate = CURRENT_TIMESTAMP";
	let result = "";

	// size
	sql = queryStringBuilder(sql, item, "overallLength", "varchar");
	sql = queryStringBuilder(sql, item, "handleLength", "varchar");
	sql = queryStringBuilder(sql, item, "guardWidth", "varchar");
	sql = queryStringBuilder(sql, item, "weight", "varchar");

	// blade
	sql = queryStringBuilder(sql, item, "steelTypeID");
	sql = queryStringBuilder(sql, item, "bladeLength", "varchar");
	sql = queryStringBuilder(sql, item, "bladeWidth", "varchar");
	sql = queryStringBuilder(sql, item, "bladeThickness", "varchar");

	// handle
	// fittings

	// scabbard
	sql = queryStringBuilder(sql, item, "scabbardID");

	sql += ` where itemID = ${itemID}`;

	// console.log("sql", sql);

	if (sql.indexOf(",") > -1) {
		result = await executeQuery({ query: sql });
	} else {
		throw new Error(
			"No valid parameters found for patch > weapon > medieval > sword",
		);
	}

	return responseMessage("patch", itemType, result);
}

export default {
	// getReferenceData,
	getSize,
	getBlade,
	getScabbard,
	patch,
};
