import { executeQuery } from "~/lib/db";
import { responseMessage } from "~/lib/db";
import { queryStringBuilder } from "~/services/_main";

const itemType = "japaneseArmorMempo";
const tableName = "jap_armor_mempo";
const primaryKey = "japArmorMempoID";

async function get(itemID) {
	const results = await executeQuery({
		query: `
		SELECT
			${primaryKey},
			itemID,
			mainPlate,
			accentPlate,
			mainLace,
			accentLace,
			style,
			mustacheStyle,
			mustacheColor,
			tareStyle,
			tareColor,
			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: "",
				style: "",
				mustacheStyle: "",
				mustacheColor: "",
				tareStyle: "",
				tareColor: "",
				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, "style", "varchar");
	sql = queryStringBuilder(sql, obj, "mustacheStyle", "varchar");
	sql = queryStringBuilder(sql, obj, "mustacheColor", "varchar");
	sql = queryStringBuilder(sql, obj, "tareStyle", "varchar");
	sql = queryStringBuilder(sql, obj, "tareColor", "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 > mempo",
		);
	}

	return responseMessage("patch", itemType, result);
}

export default {
	get,
	patch,
};
