package core

import (
	"github.com/go-skynet/LocalAI/core/config"
	"github.com/go-skynet/LocalAI/core/services"
	"github.com/go-skynet/LocalAI/pkg/model"
)

// The purpose of this structure is to hold pointers to all initialized services, to make plumbing easy
// Perhaps a proper DI system is worth it in the future, but for now keep things simple.
type Application struct {

	// Application-Level Config
	ApplicationConfig *config.ApplicationConfig
	// ApplicationState *ApplicationState

	// Core Low-Level Services
	BackendConfigLoader *config.BackendConfigLoader
	ModelLoader         *model.ModelLoader

	// Backend Services
	// EmbeddingsBackendService      *backend.EmbeddingsBackendService
	// ImageGenerationBackendService *backend.ImageGenerationBackendService
	// LLMBackendService             *backend.LLMBackendService
	// TranscriptionBackendService *backend.TranscriptionBackendService
	// TextToSpeechBackendService  *backend.TextToSpeechBackendService

	// LocalAI System Services
	BackendMonitorService *services.BackendMonitorService
	GalleryService        *services.GalleryService
	ListModelsService     *services.ListModelsService
	LocalAIMetricsService *services.LocalAIMetricsService
	// OpenAIService         *services.OpenAIService
}

// TODO [NEXT PR?]: Break up ApplicationConfig.
// Migrate over stuff that is not set via config at all - especially runtime stuff
type ApplicationState struct {
}
