import type { RepositoryConfig } from '../../../../frameworks/config/configLoader.js';
import type { ReviewFileInfo } from '../../../../modules/review-execution/entities/review/reviewFile.gateway.js';
import type { ProjectStats } from '../../../../modules/statistics-insights/entities/stats/projectStats.js';
export interface OverviewProjectStatsSummary {
    totalReviews: number;
    averageScore: number | null;
    averageDuration: number;
    totalBlocking: number;
    totalWarnings: number;
}
export interface OverviewProjectStatsEntry {
    project: string;
    path: string;
    stats: ProjectStats;
    summary: OverviewProjectStatsSummary;
}
export interface OverviewActiveJobInput {
    id: string;
    mrNumber: number;
    project: string;
    mrUrl: string;
    status: string;
    startedAt: string | null;
    title?: string;
    jobType?: 'review' | 'followup';
}
export interface OverviewProjectConfigSummary {
    externalLink?: string;
}
export interface OverviewCapacityInput {
    running: number;
    max: number;
}
export interface OverviewPresenterInput {
    repositories: RepositoryConfig[];
    activeJobs: OverviewActiveJobInput[];
    projectStats: OverviewProjectStatsEntry[];
    recentReviews: ReviewFileInfo[];
    projectConfigs?: Record<string, OverviewProjectConfigSummary>;
    capacity?: OverviewCapacityInput;
}
export interface OverviewActiveReviewItem {
    jobId: string;
    projectName: string;
    projectPath: string;
    mrPrefix: 'MR' | 'PR';
    mrNumber: number;
    mrUrl: string;
    elapsedLabel: string;
    jobType: 'review' | 'followup';
}
export interface OverviewActiveReviewsSection {
    items: OverviewActiveReviewItem[];
    isEmpty: boolean;
    emptyMessage: string;
}
export interface OverviewProjectCardItem {
    projectName: string;
    projectPath: string;
    platform: 'gitlab' | 'github';
    totalReviews: number;
    averageScoreLabel: string;
    sparklinePoints: number[];
    isEmptyHistory: boolean;
    externalLink?: string;
}
export interface OverviewProjectCardsSection {
    items: OverviewProjectCardItem[];
    isEmpty: boolean;
    emptyMessage: string;
}
export interface OverviewRecentReviewItem {
    filename: string;
    projectName: string;
    mrPrefix: 'MR' | 'PR';
    mrNumber: string;
    title: string;
    mtime: string;
}
export interface OverviewRecentReviewsFeedSection {
    items: OverviewRecentReviewItem[];
    isEmpty: boolean;
    emptyMessage: string;
}
export interface HeaderCapacityViewModel {
    runningCount: number;
    totalCapacity: number;
    label: string;
    isSaturated: boolean;
}
export interface OverviewViewModel {
    activeReviews: OverviewActiveReviewsSection;
    projectCards: OverviewProjectCardsSection;
    recentReviewsFeed: OverviewRecentReviewsFeedSection;
    headerCapacity: HeaderCapacityViewModel;
}
export interface OverviewPresenterDependencies {
    now?: () => Date;
}
export declare class OverviewPresenter {
    private readonly now;
    constructor(dependencies?: OverviewPresenterDependencies);
    present(input: OverviewPresenterInput): OverviewViewModel;
}
//# sourceMappingURL=overview.presenter.d.ts.map