const ApiError = require("../errorClass");
const config = require("../../../config-handler");

async function isAuthorExists(authorId) {
	if (!authorId) return false;
	return (
		(
			await global.database.authors
				.promiseMode()
				.get({ where: { id: authorId } })
		).length !== 0
	);
}

async function checkSyntaxArgs(req, res) {
	return !!(
		// Проверка поля type.
		["author", "muzic"].indexOf(req.json?.type) !== -1 && // Проверка поля id.
		(Number.isInteger(req.json.id) && req.json.type === "author"
			? await isAuthorExists(req.json.id)
			: true)
	);
}

module.exports = async (req, res) => {
	if (req.json === undefined) {
		// console.log(req.headers);
		throw new ApiError("METHOD_MUST_BE_POST_JSON", {
			request_method: req.method,
			"content-type": !req.headers["content-type"]
				? null
				: req.headers["content-type"],
		});
	}
	if (!(await checkSyntaxArgs(req, res))) {
		throw new ApiError("INVALID_OR_UNSYNTAX_PARAMS", {
			request_method: req.method,
			params: {
				type: req.json?.type === undefined ? null : req.json.type,
				name: req.json?.name === undefined ? null : req.json.name,
				...(req.json?.type === "muzic"
					? {
							author_id:
								req.json?.author_id === undefined ? null : req.json?.author_id,
							data: req.json?.data === undefined ? null : req.json.data,
					  }
					: {}),
			},
		});
	}
	if (req.json.type === "author") {
		// Удаляем всю музыку этого исполнителя
		await global.database.muzic.promiseMode().remove({
			where: {
				author_id: req.json.id,
			},
		});
		// Удаляем исполнителя
		await global.database.authors.promiseMode().remove({
			where: {
				id: req.json.id,
			},
		});
	} else {
		await global.database.muzic.promiseMode().remove({
			where: {
				id: req.json.id,
			},
		});
	}
	return "ok";
};