package webagent

import (
	"context"

	"github.com/gin-gonic/gin"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/service/maas"
)

type fakeHostedAgentValidator struct {
	last  maas.AgentBindingValidation
	err   error
	calls int
}

func (fake *fakeHostedAgentValidator) ValidateAgentBindingForUser(_ context.Context, params maas.AgentBindingValidation) error {
	fake.calls++
	fake.last = params
	return fake.err
}

func newWebAgentRouter(deps Dependencies) *gin.Engine {
	gin.SetMode(gin.ReleaseMode)
	if deps.ReviewStore == nil {
		if reviewStore, ok := deps.AgentStore.(ReviewStore); ok {
			deps.ReviewStore = reviewStore
		}
	}
	if deps.ProjectStore == nil {
		if projectStore, ok := deps.AgentStore.(ProjectStore); ok {
			deps.ProjectStore = projectStore
		}
	}
	if deps.RewindStore == nil {
		if rewindStore, ok := deps.AgentStore.(RewindStore); ok {
			deps.RewindStore = rewindStore
		}
	}
	if deps.SessionAuth == nil {
		if sa, ok := deps.AgentStore.(api.SessionAuthenticator); ok {
			deps.SessionAuth = sa
		}
	}
	if deps.WorkspaceStore == nil {
		if ws, ok := deps.AgentStore.(api.WorkspaceResolver); ok {
			deps.WorkspaceStore = ws
		}
	}
	router := gin.New()
	RegisterRoutes(router, deps)
	return router
}
