package main

import (
	"context"
	"log"
	"os"

	"agent/internal/agent"
	"agent/internal/server"
)

func main() {
	cfg := agent.LoadConfig()

	store, err := agent.NewSessionStore(cfg.DataDir)
	if err != nil {
		log.Fatalf("failed to initialize session store: %v", err)
	}

	dockerCfg, err := agent.NewDockerConfigStore(cfg.DataDir)
	if err != nil {
		log.Fatalf("failed to initialize docker config store: %v", err)
	}

	apiCfg, err := agent.NewAPIConfigStore(cfg.DataDir, agent.APIConfig{
		APIKey:   cfg.APIKey,
		BaseURL:  cfg.BaseURL,
		Model:    cfg.Model,
		Provider: agent.ProviderOpenAI,
	})
	if err != nil {
		log.Fatalf("failed to initialize api config store: %v", err)
	}

	r, srv := server.NewRouter(cfg, store, dockerCfg, apiCfg)

	// 托管模式：检测到 BENCHMARK_TOKEN 时自动启动评测，无需外部触发。
	// agent.Run 不依赖 HTTP 服务，可直接在 goroutine 中调用。
	if os.Getenv("BENCHMARK_TOKEN") != "" {
		go func() {
			log.Printf("[benchmark] 检测到托管模式（BENCHMARK_TOKEN 已注入），自动启动评测")
			if err := srv.StartBenchmark(context.Background()); err != nil {
				log.Printf("[benchmark] 初始轮异常: %v", err)
			}
			log.Printf("[benchmark] 初始轮结束，后续 coop 完成通知将自动触发新一轮处理")
		}()
	}

	log.Printf("agent is running at http://localhost:%s", cfg.Port)
	if err := r.Run(":" + cfg.Port); err != nil {
		log.Fatalf("server stopped: %v", err)
	}
}
