// Package audit — resolver for the OutboxStore backing the OutboxWorker.
//
// Keeps construction behind one discoverable attachment point while the
// implementation remains private to this package.
package audit

import "database/sql"

// ResolveOutboxStore returns the concrete MySQL-backed durable store. A nil
// database is preserved inside the store so CheckReady returns a deterministic
// startup error instead of allowing a partially active process.
func ResolveOutboxStore(db *sql.DB) OutboxStore {
	return newMySQLOutboxStore(db)
}

// ResolveFencedOutboxStore returns the store used by an independently deployed
// Runtime Worker. Unlike the transitional monolith resolver, it requires an
// exact database-owned deployment authority and rechecks that authority in
// every claim and side-effect transaction.
func ResolveFencedOutboxStore(db *sql.DB, ownership WorkOwnership) (OutboxStore, error) {
	store, err := newFencedMySQLOutboxStore(db, ownership)
	if err != nil {
		return nil, err
	}
	return store, nil
}

// ResolveFencedOutboxQueueObserver returns the narrow, read-only diagnostic
// surface for an independently deployed Runtime Worker. The observer verifies
// the exact active deployment before reading but cannot claim or mutate work.
func ResolveFencedOutboxQueueObserver(db *sql.DB, ownership WorkOwnership) (OutboxQueueObserver, error) {
	store, err := newFencedMySQLOutboxStore(db, ownership)
	if err != nil {
		return nil, err
	}
	return store, nil
}
