package packs

import (
	"database/sql"

	"github.com/nexuscrm/backend/internal/application/services"
	"github.com/nexuscrm/backend/internal/domain/ports"
	"github.com/nexuscrm/backend/internal/features/analytics"
	"github.com/nexuscrm/backend/internal/features/metadata"
	"github.com/nexuscrm/backend/internal/features/permissions"
	"github.com/nexuscrm/backend/internal/infrastructure/database"
)

// ApplyDeps provides the services that packs need during apply.
type ApplyDeps struct {
	DB           *sql.DB
	DBConn       *database.TiDBConnection
	TxManager    ports.TransactionManager
	Metadata     *metadata.MetadataService
	Schema       *metadata.SchemaManager
	Permissions  *permissions.PermissionService
	System       *services.SystemManager
	FormulaView  *analytics.FormulaViewService
	MetadataRepo ports.MetadataRepository
}

// VerifyDeps provides read-only access for pack verification.
//
// DeepChecks signals an operator-initiated verify (`cmd/setup verify`)
// where gates that scan live object tables or assume writer quiescence
// are appropriate. The default (false) is the pod-readiness contract:
// cheap, metadata-only checks that are safe to run on every restart
// and tolerant of concurrent writers.
type VerifyDeps struct {
	DB         *sql.DB
	DeepChecks bool
}
