package records

import (
	"context"

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

// metadataDeployRecordDeleter is a composition-only destructive adapter. It is
// deliberately separate from ContractService so a caller holding the ordinary
// contract.Records surface cannot recover deploy-only hard-delete authority by
// interface assertion.
type metadataDeployRecordDeleter struct {
	persistence *PersistenceService
}

var _ contract.MetadataDeployRecordDeleter = (*metadataDeployRecordDeleter)(nil)

// NewMetadataDeployRecordDeleter constructs the narrow capability for the
// platform metadata-deploy composition root. The concrete adapter stays
// private; only the orchestrator receives the returned capability.
func NewMetadataDeployRecordDeleter(persistence *PersistenceService) contract.MetadataDeployRecordDeleter {
	if persistence == nil {
		return nil
	}
	return &metadataDeployRecordDeleter{persistence: persistence}
}

func (s *metadataDeployRecordDeleter) DeleteMetadataDeployRecord(
	ctx context.Context,
	objectName string,
	id string,
	requiredMatch map[string]string,
	user *models.UserSession,
) error {
	return s.persistence.deleteMetadataDeployRecord(ctx, objectName, id, requiredMatch, user)
}
