class ApiUtils {
	static toSnakeCaseObject(obj) {
		console.log("Converting to snake case:", obj);
		const newObj = Object.entries(obj).reduce((acc, [key, value]) => {
			const snakeKey = key.replace(/[A-Z]/g, (match) => "_" + match.toLowerCase());
			if (key === "sortings") {
				value = value
					? value.map((item) => {
							const [field, order] = item;
							const snakeField = field.replace(
								/[A-Z]/g,
								(match) => "_" + match.toLowerCase(),
							);
							return [snakeField, order];
						})
					: value;
			}
			if (Array.isArray(value)) {
				value = value.map((item) => {
					return Object.prototype.toString.call(item) === "[object Object]"
						? this.toSnakeCaseObject(item)
						: item;
				});
			} else if (Object.prototype.toString.call(value) === "[object Object]") {
				value = this.toSnakeCaseObject(value);
			}
			acc[snakeKey] = value;
			return acc;
		}, {});
		return newObj;
	}

	static toCamelCaseObject(obj) {
		const newObj = Object.entries(obj).reduce((acc, [key, value]) => {
			const camelKey = key.replace(/_([a-zA-Z0-9])/g, (match, p1) => p1.toUpperCase());
			// check if value is an array
			if (Array.isArray(value)) {
				value = value.map((item) => {
					return Object.prototype.toString.call(item) === "[object Object]"
						? this.toCamelCaseObject(item)
						: item;
				});
			} else if (Object.prototype.toString.call(value) === "[object Object]") {
				value = this.toCamelCaseObject(value);
			}
			acc[camelKey] = value;
			return acc;
		}, {});
		return newObj;
	}
}

export default ApiUtils;
