package session

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/require"
)

type restartSessionStore struct {
	restartedAgentID string
	restartOK        bool
}

func (s *restartSessionStore) RestartByAgent(agentID string) bool {
	s.restartedAgentID = agentID
	return s.restartOK
}

func TestRestartHandlerRestartsActiveSession(t *testing.T) {
	gin.SetMode(gin.TestMode)
	store := &restartSessionStore{restartOK: true}
	router := gin.New()
	router.POST("/sessions/:agentId/restart", NewRestartHandler(store))

	req := httptest.NewRequest(http.MethodPost, "/sessions/agent-1/restart", nil)
	rec := httptest.NewRecorder()
	router.ServeHTTP(rec, req)

	require.Equal(t, http.StatusOK, rec.Code)
	require.Equal(t, "agent-1", store.restartedAgentID)
	require.JSONEq(t, `{"restarted":true}`, rec.Body.String())
}

func TestRestartHandlerReturnsNotFoundWhenSessionMissing(t *testing.T) {
	gin.SetMode(gin.TestMode)
	store := &restartSessionStore{}
	router := gin.New()
	router.POST("/sessions/:agentId/restart", NewRestartHandler(store))

	req := httptest.NewRequest(http.MethodPost, "/sessions/agent-1/restart", nil)
	rec := httptest.NewRecorder()
	router.ServeHTTP(rec, req)

	require.Equal(t, http.StatusNotFound, rec.Code)
	require.Equal(t, "agent-1", store.restartedAgentID)
	require.JSONEq(t, `{"error":"no active session for agent"}`, rec.Body.String())
}
