package main

import (
	"encoding/base64"
	"oc-datacenter/conf"
	_ "oc-datacenter/routers"

	oclib "cloud.o-forge.io/core/oc-lib"
	"cloud.o-forge.io/core/oc-lib/tools"
	beego "github.com/beego/beego/v2/server/web"
	"github.com/beego/beego/v2/server/web/filter/cors"
)

const appname = "oc-datacenter"

func main() {
	// Init the oc-lib
	oclib.Init(appname)

	// Load the right config file
	o := oclib.GetConfLoader()
	conf.GetConfig().Mode = o.GetStringDefault("MODE", "kubernetes")
	conf.GetConfig().KubeHost = o.GetStringDefault("KUBERNETES_SERVICE_HOST", "")
	conf.GetConfig().KubePort = o.GetStringDefault("KUBERNETES_SERVICE_PORT", "6443")

	sDec, err := base64.StdEncoding.DecodeString(o.GetStringDefault("KUBE_CA", ""))
	if err == nil {
		conf.GetConfig().KubeCA = string(sDec)
	}
	sDec, err = base64.StdEncoding.DecodeString(o.GetStringDefault("KUBE_CERT", ""))
	if err == nil {
		conf.GetConfig().KubeCert = string(sDec)
	}
	sDec, err = base64.StdEncoding.DecodeString(o.GetStringDefault("KUBE_DATA", ""))
	if err == nil {
		conf.GetConfig().KubeData = string(sDec)
	}
	// feed the library with the loaded config
	oclib.SetConfig(
		o.GetStringDefault("MONGO_URL", "mongodb://127.0.0.1:27017"),
		o.GetStringDefault("MONGO_DATABASE", "DC_myDC"),
		o.GetStringDefault("NATS_URL", "nats://localhost:4222"),
		o.GetStringDefault("LOKI_URL", ""),
		o.GetStringDefault("LOG_LEVEL", "info"),
	)

	// Beego init
	beego.BConfig.AppName = appname
	beego.BConfig.Listen.HTTPPort = o.GetIntDefault("port", 8080)
	beego.BConfig.WebConfig.DirectoryIndex = true
	beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
	api := &tools.API{}
	api.Discovered(beego.BeeApp.Handlers.GetAllControllerInfo())
	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
		AllowAllOrigins:  true,
		AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
		AllowHeaders:     []string{"Origin", "Authorization", "Content-Type"},
		ExposeHeaders:    []string{"Content-Length", "Content-Type"},
		AllowCredentials: true,
	}))
	beego.Run()
}