import * as elasticsearch from "@elastic/elasticsearch";
import config from "@/config/index.js";

const index = {
	settings: {
		analysis: {
			analyzer: {
				ngram: {
					tokenizer: "ngram",
				},
			},
		},
	},
	mappings: {
		properties: {
			text: {
				type: "text",
				index: true,
				analyzer: "ngram",
			},
			userId: {
				type: "keyword",
				index: true,
			},
			userHost: {
				type: "keyword",
				index: true,
			},
		},
	},
};

// Init ElasticSearch connection
const client = config.elasticsearch
	? new elasticsearch.Client({
			node: `${config.elasticsearch.ssl ? "https://" : "http://"}${
				config.elasticsearch.host
			}:${config.elasticsearch.port}`,
			auth:
				config.elasticsearch.user && config.elasticsearch.pass
					? {
							username: config.elasticsearch.user,
							password: config.elasticsearch.pass,
					  }
					: undefined,
			pingTimeout: 30000,
	  })
	: null;

if (client) {
	client.indices
		.exists({
			index: config.elasticsearch.index || "misskey_note",
		})
		.then((exist) => {
			if (!exist.body) {
				client.indices.create({
					index: config.elasticsearch.index || "misskey_note",
					body: index,
				});
			}
		});
}

export default client;
