export class ApiError extends Error {
	constructor(
		readonly message: string,
		public readonly code: number,
		public readonly httpStatus: number = 400,
		public readonly defaultParams?: string[],
	) {
		super(message);
	}

	withDefaultParams(): ApiError {
		if (this.defaultParams)
			return new ApiError(
				applyParamsToString(this.message, this.defaultParams),
				this.code,
				this.httpStatus,
			);
		return this;
	}

	withParams(...params: (string | number)[]): ApiError {
		return new ApiError(
			applyParamsToString(this.message, params),
			this.code,
			this.httpStatus,
		);
	}
}

export function applyParamsToString(
	s: string,
	params: (string | number)[],
): string {
	let newString = s;
	params.forEach((a) => {
		newString = newString.replace("{}", "" + a);
	});
	return newString;
}
