import type { BobbinContext, XrpcRequestInit } from "#lib/api/client.ts";
import { jsonGet } from "#lib/api/_request.ts";
import type { TicketState } from "#lib/api/records.ts";
// count endpoints share { subject } params and { count, distinctAuthors } output.
export type CountName =
| "org.tangled.feed.countStars"
| "org.tangled.feed.countStarsBy"
| "org.tangled.feed.countComments"
| "org.tangled.feed.countCommentsBy"
| "org.tangled.feed.countReactions"
| "org.tangled.feed.countReactionsBy"
| "org.tangled.graph.countFollows"
| "org.tangled.graph.countFollowsBy"
| "org.tangled.label.countDefinitions"
| "org.tangled.publicKey.countKeys"
| "org.tangled.repo.countArtifacts"
| "org.tangled.repo.countArtifactsBy"
| "org.tangled.repo.countCollaborators"
| "org.tangled.repo.countCollaboratorsBy"
| "org.tangled.repo.countForks"
| "org.tangled.repo.countIssues"
| "org.tangled.repo.countPulls"
| "org.tangled.repo.countRepos"
| "org.tangled.string.countStrings";
export interface CountResult {
count: number;
distinctAuthors: number;
}
export interface CountFilter {
author?: string;
state?: TicketState;
status?: TicketState;
}
export const count = (
ctx: BobbinContext,
name: CountName,
subject: string,
filter: CountFilter = {},
init?: XrpcRequestInit
): Promise<CountResult> => jsonGet<CountResult>(ctx, name, { subject, ...filter }, init);