using LightlessSync.API.Data; using LightlessSync.API.Data.Enum; namespace LightlessSync.PlayerData.Pairs; /// /// orchestrates the lifecycle of a paired character /// public interface IPairHandlerAdapter : IDisposable, IPairPerformanceSubject { new string Ident { get; } bool Initialized { get; } bool IsVisible { get; } bool ScheduledForDeletion { get; set; } CharacterData? LastReceivedCharacterData { get; } long LastAppliedDataBytes { get; } new string? PlayerName { get; } string PlayerNameHash { get; } uint PlayerCharacterId { get; } DateTime? LastDataReceivedAt { get; } DateTime? LastApplyAttemptAt { get; } DateTime? LastSuccessfulApplyAt { get; } string? LastFailureReason { get; } IReadOnlyList LastBlockingConditions { get; } bool IsApplying { get; } bool IsDownloading { get; } int PendingDownloadCount { get; } int ForbiddenDownloadCount { get; } bool PendingModReapply { get; } bool ModApplyDeferred { get; } int MissingCriticalMods { get; } int MissingNonCriticalMods { get; } int MissingForbiddenMods { get; } DateTime? InvisibleSinceUtc { get; } DateTime? VisibilityEvictionDueAtUtc { get; } string? MinionAddressHex { get; } ushort? MinionObjectIndex { get; } DateTime? MinionResolvedAtUtc { get; } string? MinionResolveStage { get; } string? MinionResolveFailureReason { get; } bool MinionPendingRetry { get; } IReadOnlyList MinionPendingRetryChanges { get; } bool MinionHasAppearanceData { get; } Guid OwnedPenumbraCollectionId { get; } bool NeedsCollectionRebuildDebug { get; } uint MinionOrMountCharacterId { get; } uint PetCharacterId { get; } uint CompanionCharacterId { get; } void Initialize(); void ApplyData(CharacterData data); void ApplyLastReceivedData(bool forced = false); void HardReapplyLastData(); bool FetchPerformanceMetricsFromCache(); void LoadCachedCharacterData(CharacterData data); void SetUploading(bool uploading); void SetPaused(bool paused); }