import { executeQuery } from "~/lib/db";
import { responseMessage } from "~/lib/db";
import { queryStringBuilder } from "~/services/_main";

const itemType = "japaneseArmorDo";
const tableName = "jap_armor_do";
const primaryKey = "japArmorDoID";

async function get(itemID) {
	const results = await executeQuery({
		query: `
		SELECT
			${primaryKey},
			itemID,
			mainPlate,
			accentPlate,
			mainLace,
			accentLace,
			kusazuri,
			bannerHolder,
			holdingRings,
			tateEriFabric,
			tateEriLace,
			tateEriThread,
			tateEriTrim,
			mimiIto,
			hishinui,
			fabric,
			brassTrim,
			egawa
		FROM
			${tableName}
		WHERE
			itemID=${itemID}`,
	});

	return results.length === 1
		? results[0]
		: {
				// default values object structure
				itemID: parseInt(itemID, 10),
				mainPlate: "",
				accentPlate: "",
				mainLace: "",
				accentLace: "",
				kusazuri: "",
				bannerHolder: "",
				holdingRings: "",
				tateEriFabric: "",
				tateEriLace: "",
				tateEriThread: "",
				tateEriTrim: "",
				mimiIto: "",
				hishinui: "",
				fabric: "",
				brassTrim: "",
				egawa: "",
		  };
}

async function patch(itemID, obj) {
	const check = await executeQuery({
		query: `select ${primaryKey} from ${tableName} where itemID=${itemID}`,
	});

	if (check.length === 0) {
		await executeQuery({
			query: `insert into ${tableName} (itemID) values (${itemID})`,
		});
	}

	let sql = `update ${tableName} set updatedDate = CURRENT_TIMESTAMP`;
	let result = "";

	sql = queryStringBuilder(sql, obj, "mainPlate", "varchar");
	sql = queryStringBuilder(sql, obj, "accentPlate", "varchar");
	sql = queryStringBuilder(sql, obj, "mainLace", "varchar");
	sql = queryStringBuilder(sql, obj, "accentLace", "varchar");
	sql = queryStringBuilder(sql, obj, "kusazuri", "varchar");
	sql = queryStringBuilder(sql, obj, "bannerHolder", "varchar");
	sql = queryStringBuilder(sql, obj, "holdingRings", "varchar");
	sql = queryStringBuilder(sql, obj, "tateEriFabric", "varchar");
	sql = queryStringBuilder(sql, obj, "tateEriLace", "varchar");
	sql = queryStringBuilder(sql, obj, "tateEriThread", "varchar");
	sql = queryStringBuilder(sql, obj, "tateEriTrim", "varchar");
	sql = queryStringBuilder(sql, obj, "mimiIto", "varchar");
	sql = queryStringBuilder(sql, obj, "hishinui", "varchar");
	sql = queryStringBuilder(sql, obj, "fabric", "varchar");
	sql = queryStringBuilder(sql, obj, "brassTrim", "varchar");
	sql = queryStringBuilder(sql, obj, "egawa", "varchar");

	sql += ` where itemID = ${itemID}`;

	if (sql.indexOf(",") > -1) {
		result = await executeQuery({ query: sql });
	} else {
		throw new Error(
			"No valid parameters found for patch > japanese > armor > do",
		);
	}

	return responseMessage("patch", itemType, result);
}

export default {
	get,
	patch,
};
