package processor

import (
	"context"

	"eslogad-be/internal/contract"

	"github.com/google/uuid"
)

// CachedUserWrapper wraps CachedUserProcessor to implement middleware.UserProcessor interface
type CachedUserWrapper struct {
	cached *CachedUserProcessor
	full   *UserProcessorImpl
}

// NewCachedUserWrapper creates a new wrapper
func NewCachedUserWrapper(cached *CachedUserProcessor, full *UserProcessorImpl) *CachedUserWrapper {
	return &CachedUserWrapper{
		cached: cached,
		full:   full,
	}
}

// GetUserByID uses cached version for fast lookups
func (w *CachedUserWrapper) GetUserByID(ctx context.Context, id uuid.UUID) (*contract.UserResponse, error) {
	return w.cached.GetUserByIDCached(ctx, id)
}

// GetUserByIDFull uses full version when all data is needed
func (w *CachedUserWrapper) GetUserByIDFull(ctx context.Context, id uuid.UUID) (*contract.UserResponse, error) {
	return w.full.GetUserByID(ctx, id)
}