import { log } from "../main";

export class Validate {
	public static config(conf: config) {

		let valid = true;

		// Assert data in log object:
		if (![`silly`,`debug`,`info`,`error`,`fatal`,`warn`,`trace`].includes(conf.log.level)) {
			log.error(`Unknown log level: ${conf.log.level}`);
			valid = false;
		};

		// Assert data in the game object
		if (![`csv`, `sheets`].includes(conf.game.cards.type)) {
			log.error(`Unsupported cards type: ${conf.game.cards.type}`);
			valid = false;
		};

		if (conf.game.cards.type == `sheets` && !conf.game.cards.key) {
			log.error(`Cannot have game.cards.type set to "sheets" and not have the game.cards.key set.`);
			valid = false;
		};

		if (conf.game.code_length <= 1) {
			log.error(`Game codes can't have <= 1 characters: ${conf.game.code_length}`);
			valid = false;
		}

		if (!conf.websocket.permitted_hosts) {
			log.error(`Can't have a blank or null websocket.permitted_hosts`);
			valid = false;
		};

		if (!conf.datastores) {
			log.error(`Datastores object must be defined`);
			valid = false;
		} else {
			if (conf.datastores.enabled == null) {
				log.error(`datastores.enabled must be defined`);
				valid = false;
			};

			if (conf.datastores.enabled && conf.datastores.directory?.length == 0) {
				log.error(`datastores.directory must be a filepath if datastores.enabled is set to true`);
				valid = false;
			};
		};

		// Config is valid
		return valid;
	};
};