package catalogpublication

import (
	"context"
	"database/sql"
	"errors"
	"fmt"

	"github.com/pingcap-inc/nexuscrm-controlplane/internal/catalogadmissionfence"
)

func lockCandidateSourcePreparationAdmission(
	ctx context.Context,
	tx *sql.Tx,
) error {
	if _, err := catalogadmissionfence.LockExclusive(ctx, tx); err != nil {
		if errors.Is(err, catalogadmissionfence.ErrMissing) ||
			errors.Is(err, catalogadmissionfence.ErrIdentity) ||
			errors.Is(err, catalogadmissionfence.ErrCorrupt) {
			return fmt.Errorf(
				"%w: publication admission fence: %v",
				ErrSourceCorrupt,
				err,
			)
		}
		return err
	}
	return nil
}
