package identity

import (
	"context"

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

func withTxValue[T any](ctx context.Context, db coredb.TxBeginner, fn func(coredb.Tx) (T, error)) (T, error) {
	var value T
	err := coredb.WithTx(ctx, db, func(tx coredb.Tx) error {
		var err error
		value, err = fn(tx)
		return err
	})
	if err != nil {
		var zero T
		return zero, err
	}
	return value, nil
}

func withTx2[A any, B any](ctx context.Context, db coredb.TxBeginner, fn func(coredb.Tx) (A, B, error)) (A, B, error) {
	var a A
	var b B
	err := coredb.WithTx(ctx, db, func(tx coredb.Tx) error {
		var err error
		a, b, err = fn(tx)
		return err
	})
	if err != nil {
		var zeroA A
		var zeroB B
		return zeroA, zeroB, err
	}
	return a, b, nil
}
