import turndown from "turndown";
import { RuntimeConfig } from "nuxt/schema";
export const ContentFilenameRegex = /\.(doc|docx|md|markdown)$/i;

export const emailRegex: RegExp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
export const usernameRegex: (uname: string) => RegExp = (uname: string) => new RegExp("^" + uname.trim().replace(/\*/g, "\\*") + "$", "i");
export const mammothTemplate = (doc, defaults, content) => {
	return content.replace(/\n|\r\n|\r/gm, "");
};
export const sanitizeConf = {
	allowedTags: [
		"address",
		"article",
		"aside",
		"footer",
		"header",
		"h1",
		"h2",
		"h3",
		"h4",
		"h5",
		"h6",
		"hgroup",
		"main",
		"nav",
		"section",
		"blockquote",
		"dd",
		"div",
		"dl",
		"dt",
		"figcaption",
		"figure",
		"hr",
		"li",
		"main",
		"ol",
		"p",
		"pre",
		"ul",
		"a",
		"abbr",
		"b",
		"bdi",
		"bdo",
		"br",
		"cite",
		"code",
		"data",
		"dfn",
		"em",
		"i",
		"kbd",
		"mark",
		"q",
		"rb",
		"rp",
		"rt",
		"rtc",
		"ruby",
		"s",
		"samp",
		"small",
		"span",
		"strong",
		"sub",
		"sup",
		"time",
		"u",
		"var",
		"wbr",
		"caption",
		"col",
		"colgroup",
		"table",
		"tbody",
		"td",
		"tfoot",
		"th",
		"thead",
		"tr",
	],
	disallowedTagsMode: "discard",
	allowedAttributes: {
		a: ["href", "name", "target"],
		// We don't currently allow img itself by default, but this
		// would make sense if we did. You could add srcset here,
		// and if you do the URL is checked for safety
		img: ["src"],
	},
	// Lots of these won't come up by default because we don't allow them
	selfClosing: ["img", "br", "hr", "area", "base", "basefont", "input", "link", "meta"],
	// URL schemes we permit
	allowedSchemes: ["http", "https", "ftp", "mailto", "tel"],
	allowedSchemesAppliedToAttributes: ["href", "src", "cite"],
	allowProtocolRelative: true,
	enforceHtmlBoundary: false,
	allowedSchemesByTag: {
		img: ["data"],
	},
};

export const messages = {
	[403]: "Forbidden",
	[401]: "Authorization required",
	[404]: "Not found",
};

export const apiRoot = "http://127.0.0.1:4567/api";
export const h2m = new turndown({
	hr: "---",
	codeBlockStyle: "fenced",
	emDelimiter: "*",
	bulletListMarker: "+",
});

export const rc: RuntimeConfig & any = {
	captcha: {
		secret: process.env.CAPTCHASECRET,
		key: process.env.CAPTCHAKEY,
	},
	database: {
		user: process.env.DBUSER,
		password: process.env.DBPASS,
		name: process.env.DBNAME,
		uri: `mongodb://${process.env.DB}`,
	},
	jwt: process.env.JWT,
	public: {
		recaptcha: {
			v2SiteKey: process.env.CAPTCHAKEY,
		},
		auth: {
			computed: {
				origin: "127.0.0.1",
			},
		},
		// apiBase: "/api"
	},
	nodebb: {
		masterToken: process.env.nbb_bearer,
	},
	app: {},
};
export const doNotSelect = ["password", "auth", "ipLog"].map((b) => `-${b}`).join(" ");