import { Server } from "linebridge"

import DbManager from "@shared-classes/DbManager"
import CacheService from "@shared-classes/CacheService"
import StorageClient from "@shared-classes/StorageClient"

import SharedMiddlewares from "@shared-middlewares"

class API extends Server {
	static refName = "marketplace"
	static useEngine = "hyper-express-ng"
	static routesPath = `${__dirname}/routes`
	static listen_port = process.env.HTTP_LISTEN_PORT ?? 3005

	middlewares = {
		...SharedMiddlewares,
	}

	contexts = {
		db: new DbManager(),
		cache: new CacheService({
			fsram: false,
		}),
		storage: StorageClient({
			endPoint: process.env.B2_ENDPOINT,
			cdnUrl: process.env.B2_CDN_ENDPOINT,
			defaultBucket: process.env.B2_BUCKET,
			accessKey: process.env.B2_KEY_ID,
			secretKey: process.env.B2_APP_KEY,
			port: 443,
			useSSL: true,
			setupBucket: false,
		}),
	}

	async onInitialize() {
		await this.contexts.db.initialize()
		await this.contexts.storage.initialize()

		global.cache = this.contexts.cache
		global.storages = {
			standard: this.contexts.storage,
		}
	}
}

Boot(API)