// Package agentops owns agent runtime operation storage.
package agentops

import (
	"context"
	"log/slog"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
	"github.com/tidbcloud/AgentTeam/internal/store/onboarding"
)

// Store owns agent operation runtime event persistence and read models.
type Store struct {
	db                 coredb.DB
	onboardingEvidence OnboardingEvidenceRecorder
	logger             *slog.Logger
}

// TxStore owns agent operation persistence inside an existing transaction.
type TxStore struct {
	tx coredb.Tx
}

// Options contains optional Store configuration.
type OnboardingEvidenceRecorder interface {
	RecordVisibleReply(ctx context.Context, evidence onboarding.VisibleReplyEvidence) error
}

type Options struct {
	OnboardingEvidence OnboardingEvidenceRecorder
	Logger             *slog.Logger
}

// New constructs an agent operations Store.
func New(db coredb.DB, options Options) *Store {
	logger := options.Logger
	if logger == nil {
		logger = slog.Default()
	}
	return &Store{db: db, onboardingEvidence: options.OnboardingEvidence, logger: logger}
}

// InTx binds the store to an existing transaction.
func (store *Store) InTx(tx coredb.Tx) TxStore {
	return TxStore{tx: tx}
}
