package app

import (
	"fmt"
	"log/slog"

	"github.com/iomodo/staff/agent"
	"github.com/iomodo/staff/config"
	"github.com/iomodo/staff/git"
	"github.com/iomodo/staff/tm/git_tm"
)

// App type defines application global state
type App struct {
	logger  *slog.Logger
	config  *config.Config
	manager *agent.Manager
}

// NewApp creates new App
func NewApp(config *config.Config, logger *slog.Logger) (*App, error) {
	// Create task manager using config
	gitInterface := git.New(config, logger)
	taskManager := git_tm.NewGitTaskManager(gitInterface, config, logger)

	manager, err := agent.NewManager(config, taskManager, logger)
	if err != nil {
		return nil, fmt.Errorf("failed to create agent manager: %w", err)
	}

	return &App{
		logger:  logger,
		config:  config,
		manager: manager,
	}, nil
}

func (a *App) Start() {
	a.manager.StartAllAgents()
}

func (a *App) Stop() {
	if a.manager != nil {
		if err := a.manager.Close(); err != nil {
			a.logger.Error("Error closing manager", slog.String("error", err.Error()))
		}
	}
}
