import { ConfigVar, ConfigVarSemanticType } from "./analyze";

export function augmentConfigVar(cv: ConfigVar) {
	if (cv.semanticType != null) {
		return;
	}
	const name = cv.name.toLowerCase();
	const value = cv.defaultValue ? String(cv.defaultValue).toLowerCase() : "";
	if (name.includes("postgres") || name.includes("pg")) {
		if (name.includes("url")) cv.semanticType = ConfigVarSemanticType.POSTGRES_URL;
		if (name.includes("password") || name.includes("pass"))
			cv.semanticType = ConfigVarSemanticType.POSTGRES_PASSWORD;
		if (name.includes("user")) cv.semanticType = ConfigVarSemanticType.POSTGRES_USER;
		if (
			name.includes("db_name") ||
			name.includes("database_name") ||
			(name.includes("db") && !name.includes("url"))
		)
			cv.semanticType = ConfigVarSemanticType.POSTGRES_DB;
		if (name.includes("port")) cv.semanticType = ConfigVarSemanticType.POSTGRES_PORT;
		if (name.includes("host")) cv.semanticType = ConfigVarSemanticType.POSTGRES_HOST;
		if (name.includes("sslmode") || name.includes("ssl")) cv.semanticType = ConfigVarSemanticType.POSTGRES_SSL;
	}
	if (name.includes("mongo")) {
		if (name.includes("url") || name.includes("uri")) cv.semanticType = ConfigVarSemanticType.MONGO_URL;
		if (name.includes("password") || name.includes("pass")) cv.semanticType = ConfigVarSemanticType.MONGO_PASSWORD;
		if (name.includes("user")) cv.semanticType = ConfigVarSemanticType.MONGO_USER;
		if (
			name.includes("db_name") ||
			name.includes("database_name") ||
			(name.includes("db") && !name.includes("url"))
		)
			cv.semanticType = ConfigVarSemanticType.MONGO_DB;
		if (name.includes("port")) cv.semanticType = ConfigVarSemanticType.MONGO_PORT;
		if (name.includes("host")) cv.semanticType = ConfigVarSemanticType.MONGO_HOST;
		if (name.includes("ssl")) cv.semanticType = ConfigVarSemanticType.MONGO_SSL;
	}
	if (name.includes("sqlite_path") || value.endsWith(".sqlite") || value.endsWith(".db3") || value.endsWith(".db")) {
		cv.semanticType = ConfigVarSemanticType.SQLITE_PATH;
	}
	if (name.includes("sqlite") && (name.includes("url") || name.includes("uri") || name.includes("path"))) {
		cv.semanticType = ConfigVarSemanticType.SQLITE_PATH;
	}
	if (name.includes("database_url") || name.includes("db_url")) {
		cv.semanticType = ConfigVarSemanticType.DATABASE_URL;
	}
	if (name.includes("path") || name.includes("file_path") || name.includes("dir") || name.includes("directory")) {
		if (
			!name.includes("url") &&
			(value.startsWith("./") || value.startsWith("../") || value.startsWith("/") || /^[a-z]:[\\/]/.test(value))
		) {
			cv.semanticType = ConfigVarSemanticType.FILESYSTEM_PATH;
		}
	}
	if (
		!name.includes("url") &&
		(value.startsWith("./") || value.startsWith("../") || value.startsWith("/") || /^[a-z]:[\\/]/.test(value))
	) {
		cv.semanticType = ConfigVarSemanticType.FILESYSTEM_PATH;
	}
	if (name.includes("port")) {
		cv.semanticType = ConfigVarSemanticType.PORT;
	}
}
