34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import { UsageEntry, UserPreferences } from '../storage';
|
|
|
|
export abstract class RecoveryTracker {
|
|
protected usageData: UsageEntry[];
|
|
protected preferences: UserPreferences | null;
|
|
|
|
constructor(usageData: UsageEntry[], preferences: UserPreferences | null) {
|
|
this.usageData = usageData;
|
|
this.preferences = preferences;
|
|
}
|
|
|
|
/**
|
|
* Calculates the number of minutes elapsed since the last usage.
|
|
* This is the core logic that subclasses must support, but the implementation
|
|
* heavily depends on the specific substance's data source (preferences timestamp vs usage logs).
|
|
*/
|
|
abstract calculateMinutesFree(precise?: boolean): number;
|
|
|
|
/**
|
|
* Helper to convert milliseconds to minutes with optional precision.
|
|
*/
|
|
protected msToMinutes(ms: number, precise: boolean = false): number {
|
|
const minutes = Math.max(0, ms / (1000 * 60));
|
|
return precise ? minutes : Math.floor(minutes);
|
|
}
|
|
|
|
/**
|
|
* Helper to check if a timestamp is valid and recent enough to rely on.
|
|
*/
|
|
protected isValidTimestamp(timestamp: string | null | undefined): boolean {
|
|
return !!timestamp && !isNaN(new Date(timestamp).getTime());
|
|
}
|
|
}
|