package cmd

import (
	"context"
	"ultone/internal/api"
	"ultone/internal/controller"
	"ultone/internal/database/cache"
	"ultone/internal/database/db"
	"ultone/internal/model"
	"ultone/internal/opt"
	"ultone/internal/tool"
)

var (
	filename string
)

func Execute(ctx context.Context) error {

	tool.Must(opt.Init(filename))
	tool.Must(db.Init())
	tool.Must(cache.Init())

	// todo: if elastic search required
	// tool.Must(es.Init())

	// todo: if nebula required
	// tool.Must(nebula.Init(ctx, opt.Cfg.Nebula))

	tool.Must(model.Init(db.New()))
	tool.Must(controller.Init(ctx))
	tool.Must(api.Start(ctx))

	<-ctx.Done()

	return nil
}