package mru

import (
	"context"

	"github.com/nexuscrm/shared/pkg/contract"
)

type contractActivity struct {
	mru *Service
}

// NewContractActivity exposes the small activity surface v63 dialect routes
// need without making the dialect depend on the backend MRU service.
func NewContractActivity(mruService *Service) contract.Activity {
	if mruService == nil {
		return nil
	}
	return &contractActivity{mru: mruService}
}

func (a *contractActivity) TrackRecordAccess(ctx context.Context, userID string, objectAPIName string, recordID string) {
	if a == nil || a.mru == nil {
		return
	}
	a.mru.TrackRecordAccessAsync(ctx, userID, objectAPIName, recordID)
}

func (a *contractActivity) RelevantItems(ctx context.Context, userID string, objectAPINames []string, lastUpdatedID string) ([]contract.RelevantItem, string, error) {
	if a == nil || a.mru == nil {
		return []contract.RelevantItem{}, "", nil
	}
	items, next, err := a.mru.GetRelevantItems(ctx, userID, objectAPINames, lastUpdatedID)
	if err != nil {
		return nil, "", err
	}
	out := make([]contract.RelevantItem, 0, len(items))
	for _, item := range items {
		out = append(out, contract.RelevantItem{
			ObjectAPIName: item.ObjectAPIName,
			RecordID:      item.RecordID,
			Name:          item.Name,
		})
	}
	return out, next, nil
}
