/**
 * AwardRecognitionUseCase — spec 097, FR-30 / NFR-11.
 *
 * On a PR merge event, this use case:
 *   1. Idempotently inserts a `RecognitionEvent` keyed by
 *      (contributorId, kind, prNumber). The repository enforces this via
 *      the schema-level UNIQUE constraint plus an INSERT … ON CONFLICT
 *      DO NOTHING upsert.
 *   2. When (and only when) a row was actually inserted, updates the
 *      contributor's prCount + lastContributionAt + level (if a ladder
 *      threshold was crossed) and appends to `.all-contributorsrc` via
 *      `IAllContributorsWriter`.
 *
 * Reprocessing the same `(contributorId, kind, prNumber)` triple is a
 * complete no-op: no event, no contributor mutation, no writer call.
 */
import { ContributorLevel, RecognitionKind, type Contributor, type RecognitionEvent } from '../../../domain/generated/output.js';
import type { IContributorRepository } from '../../ports/output/repositories/contributor-repository.interface.js';
import type { IRecognitionEventRepository } from '../../ports/output/repositories/recognition-event-repository.interface.js';
import type { IAllContributorsWriter } from '../../ports/output/services/all-contributors-writer.interface.js';
/**
 * Command input for recording a recognition event for one contributor.
 */
export interface AwardRecognitionInput {
    /** Stable contributor UUID that must already exist in the contributor repository. */
    contributorId: string;
    /** Recognition category that drives idempotency and all-contributors contribution type. */
    kind: RecognitionKind;
    /** GitHub pull request number associated with PR-based recognition; repository-local count. */
    prNumber: number;
    /** ISO 8601 timestamp the recognition occurred at. Defaults to "now". */
    occurredAt?: string;
    /** Optional reference to a monthly recap (only used for MonthlyShoutout). */
    monthRecapId?: string;
}
/**
 * Outcome of an attempted recognition insert and any resulting contributor mutation.
 */
export interface AwardRecognitionResult {
    /** True only when the recognition row was newly inserted, not replayed. */
    awarded: boolean;
    /** Recognition event row — only meaningful when `awarded` is true. */
    event?: RecognitionEvent;
    /** Contributor row after any prCount/level mutation. */
    contributor?: Contributor;
}
export declare class AwardRecognitionUseCase {
    private readonly contributors;
    private readonly events;
    private readonly allContributors;
    constructor(contributors: IContributorRepository, events: IRecognitionEventRepository, allContributors: IAllContributorsWriter);
    execute(input: AwardRecognitionInput): Promise<AwardRecognitionResult>;
}
/**
 * Returns the highest contributor ladder level reached by the current level and PR count.
 */
export declare function nextLevel(current: ContributorLevel, prCount: number): ContributorLevel;
//# sourceMappingURL=award-recognition.use-case.d.ts.map