package testutil

import (
	"tercul/internal/domain"
	"tercul/internal/platform/auth"
	"time"

	"github.com/golang-jwt/jwt/v5"
)

// MockJWTManager is a mock implementation of the JWTManagement interface.
type MockJWTManager struct{}

// NewMockJWTManager creates a new MockJWTManager.
func NewMockJWTManager() auth.JWTManagement {
	return &MockJWTManager{}
}

// GenerateToken generates a dummy token for a user.
func (m *MockJWTManager) GenerateToken(user *domain.User) (string, error) {
	return "dummy-token-for-" + user.Username, nil
}

// ValidateToken validates a dummy token.
func (m *MockJWTManager) ValidateToken(tokenString string) (*auth.Claims, error) {
	if tokenString != "" {
		// A real implementation would parse the user from the token.
		// For this mock, we'll just return a generic user.
		return &auth.Claims{
			UserID:   1,
			Username: "testuser",
			Email:    "test@test.com",
			Role:     "reader",
			RegisteredClaims: jwt.RegisteredClaims{
				ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
			},
		}, nil
	}
	return nil, auth.ErrInvalidToken
}