import { ActionResult } from "../../action/ActionResult";
import { HandleCommand } from "../../HandleCommand";
import { HandlerContext } from "../../HandlerContext";
import { Maker } from "../../util/constructionUtils";
import { CommandDetails } from "../CommandDetails";
import { EditorOrReviewerParameters } from "../common/params/BaseEditorOrReviewerParameters";
import { RepoFilter } from "../common/repoFilter";
import { RepoRef } from "../common/RepoId";
import { ProjectReviewer } from "./projectReviewer";
import { ProjectReview } from "./ReviewResult";
/**
 * Function signature to route ProjectReviews, for example to GitHub issues or MessageClient
 */
export declare type ReviewRouter<PARAMS> = (pr: ProjectReview, params: PARAMS, title: string, ctx: HandlerContext) => Promise<ActionResult<RepoRef>>;
/**
 * Further details of an editor to allow selective customization
 */
export interface ReviewerCommandDetails<PARAMS extends EditorOrReviewerParameters> extends CommandDetails<PARAMS> {
    repoFilter?: RepoFilter;
    reviewRouter: ReviewRouter<PARAMS>;
}
/**
 * Create a handle function that reviews one or many repos, following AllReposByDefaultParameters
 * @param reviewerFactory function returning a reviewer instance for the appropriate parameters
 * @param factory construction function
 * @param {string} name
 * @param {string} details object allowing customization beyond reasonable defaults
 * @return {HandleCommand}
 */
export declare function reviewerHandler<PARAMS extends EditorOrReviewerParameters>(reviewerFactory: (params: PARAMS) => ProjectReviewer<PARAMS>, factory: Maker<PARAMS>, name: string, details?: Partial<ReviewerCommandDetails<PARAMS>>): HandleCommand;
//# sourceMappingURL=reviewerToCommand.d.ts.map