package system

import (
	"kra/internal/config"

	"github.com/google/wire"
	"gorm.io/gorm"
)

// Provider exposes the shared data infrastructure needed by system
// repositories without coupling this module to the parent data package.
type Provider interface {
	DB() *gorm.DB
	Database(name string) (*gorm.DB, error)
	DatabaseReady() bool
	Runtime() *config.Store
}

// ProviderSet wires system repositories and their runtime-backed adapters.
var ProviderSet = wire.NewSet(
	NewRuntimeSettings,
	NewTokenIssuer,
	NewUserRepo,
	NewAuthorityAccessRepo,
	NewAPIRepo,
	NewPermissionRepo,
	NewMenuRepo,
	NewDepartmentRepo,
	NewPositionRepo,
	NewDictionaryRepo,
	NewParameterRepo,
	NewAPITokenRepo,
	NewSecurityRepo,
	NewVersionRepo,
	NewExportRepo,
	NewAuditRepo,
	NewAuditRecorderRepo,
	NewLogFileRepo,
	NewMediaRepo,
	NewAnnouncementRepo,
	NewMaintenanceRepo,
)
