import { ChallengeProgressStatus } from "src/common/enums/challenges.enum";
export interface HabitCadence {
    duration: number;
    period_days: number;
    times_per_period: number;
    allowed_misses: number;
    target: number;
}
export interface HabitProgressState {
    total_windows: number;
    current_window: number;
    current_window_count: number;
    current_window_remaining: number;
    current_window_ends_at: Date | null;
    missed_windows: number;
    completed_count: number;
    target: number;
    remaining: number;
    remaining_days: number;
    windows: {
        index: number;
        fulfilled: boolean;
        count: number;
        required: number;
        status: HabitWindowStatus;
    }[];
    slots: {
        index: number;
        window: number;
        status: HabitWindowStatus;
    }[];
    status: ChallengeProgressStatus;
}
export type HabitWindowStatus = "completed" | "missing" | "in_progress" | "upcoming";
export declare function resolveHabitCadence(challenge: any): HabitCadence;
export declare function utcDateOnly(d: Date | string): number;
export declare function dayDiff(at: Date | string, start: Date | string): number;
export declare function windowIndexOf(at: Date | string, startedAt: Date | string, periodDays: number): number;
export declare function calculateHabitProgress(cadence: HabitCadence, startedAt: Date | string, progress?: any[], now?: Date): HabitProgressState;
export interface HabitHistoryRow {
    window: number;
    label: string;
    date: Date;
    period_start: Date;
    period_end: Date;
    iso_week: number;
    count: number;
    required: number;
    status: "completed" | "missing" | "in_progress";
}
export declare function buildHabitHistory(cadence: HabitCadence, startedAt: Date | string, progress?: any[], now?: Date): HabitHistoryRow[];
export interface NextHabitSession {
    available_now: boolean;
    from: Date;
    by: Date;
    same_window: boolean;
    remaining_in_window: number;
}
export declare function nextHabitSession(cadence: HabitCadence, startedAt: Date | string, state: HabitProgressState, markedToday: boolean, now?: Date): NextHabitSession | null;
