import { type HttpMetaParams } from "../../../interfaces/index.js";
import { type Account, type Context, type PreviewCard, type ScheduledStatus, type Status, type StatusEdit, type StatusSource, type StatusVisibility, type Translation } from "../../entities/v1/index.js";
import { type Paginator } from "../../paginator.js";
export interface FetchStatusesParams {
    /** The IDs of the Statuses in the database. */
    readonly id: readonly string[];
}
export interface CreateStatusParamsBase {
    /** ID of the status being replied to, if status is a reply */
    readonly inReplyToId?: string | null;
    /** Mark status and attached media as sensitive? */
    readonly sensitive?: boolean | null;
    /** Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field. */
    readonly spoilerText?: string | null;
    /** Visibility of the posted status. Enumerable oneOf public, unlisted, private, direct. */
    readonly visibility?: StatusVisibility | null;
    /** ISO 639 language code for this status. */
    readonly language?: string | null;
    /** https://github.com/mastodon/mastodon/pull/18350 */
    readonly allowedMentions?: readonly string[] | null;
}
export interface CreateStatusPollParam {
    /** Array of possible answers. If provided, `media_ids` cannot be used, and `poll[expires_in]` must be provided. */
    readonly options: readonly string[];
    /** Duration the poll should be open, in seconds. If provided, media_ids cannot be used, and poll[options] must be provided. */
    readonly expiresIn: number;
    /** Allow multiple choices? */
    readonly multiple?: boolean | null;
    /** Hide vote counts until the poll ends? */
    readonly hideTotals?: boolean | null;
}
export interface CreateStatusParamsWithStatus extends CreateStatusParamsBase {
    /** Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided. */
    readonly status: string;
    /** Array of Attachment ids to be attached as media. If provided, `status` becomes optional, and `poll` cannot be used. */
    readonly mediaIds?: never;
    readonly poll?: CreateStatusPollParam | null;
}
export interface CreateStatusParamsWithMediaIds extends CreateStatusParamsBase {
    /** Array of Attachment ids to be attached as media. If provided, `status` becomes optional, and `poll` cannot be used. */
    readonly mediaIds: readonly string[];
    /** Text content of the status. If `media_ids` is provided, this becomes optional. Attaching a `poll` is optional while `status` is provided. */
    readonly status?: string | null;
    readonly poll?: never;
}
export type CreateStatusParams = CreateStatusParamsWithStatus | CreateStatusParamsWithMediaIds;
export type CreateScheduledStatusParams = CreateStatusParams & {
    /** ISO 8601 Date-time at which to schedule a status. Providing this parameter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future. */
    readonly scheduledAt?: string | null;
};
interface UpdateStatusMediaAttribute {
    /** The ID of the media attachment to be modified */
    readonly id: string;
    /** A plain-text description of the media, for accessibility purposes. */
    readonly description?: string | null;
    /** Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0 */
    readonly focus?: string | null;
    /** Custom thumbnail */
    readonly thumbnail?: Blob | string | null;
}
export type UpdateStatusParams = CreateStatusParams & {
    /** https://github.com/mastodon/mastodon/pull/20878 */
    readonly mediaAttributes?: readonly UpdateStatusMediaAttribute[];
};
export interface ReblogStatusParams {
    /** any visibility except limited or direct (i.e. public, unlisted, private). Defaults to public. Currently unused in UI. */
    readonly visibility: StatusVisibility;
}
export interface TranslateStatusParams {
    /** String (ISO 639 language code). The status content will be translated into this language. Defaults to the user’s current locale. */
    readonly lang?: string;
}
export interface Statuses$SelectContextResource {
    /**
     * View statuses above and below this status in the thread.
     * @return Context
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    fetch(meta?: HttpMetaParams): Promise<Context>;
}
export interface Statuses$SelectCardResource {
    /**
     * Preview card
     * @return Card
     * @see https://docs.joinmastodon.org/api/rest/statuses/#get-api-v1-statuses-id-card
     * @deprecated
     */
    fetch(meta?: HttpMetaParams): Promise<PreviewCard>;
}
export interface Statuses$SelectRebloggedByResource {
    /**
     * View who boosted a given status.
     * @return Array of Account
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    list(meta?: HttpMetaParams): Paginator<Account[]>;
}
export interface Statuses$SelectFavouritedByResource {
    /**
     * View who favourited a given status.
     * @return Array of Account
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    list(meta?: HttpMetaParams): Paginator<Account[]>;
}
export interface Statuses$SelectHistoryResource {
    /**
     * Get all known versions of a status, including the initial and current states.
     * @returns StatusEdit
     * @see https://docs.joinmastodon.org/methods/statuses/#history
     */
    list(meta?: HttpMetaParams): Paginator<StatusEdit[]>;
}
export interface Statuses$SelectSourceResource {
    /**
     * Obtain the source properties for a status so that it can be edited.
     * @returns StatusSource
     * @see https://docs.joinmastodon.org/methods/statuses/#source
     */
    fetch(meta?: HttpMetaParams): Promise<StatusSource>;
}
export interface Statuses$SelectResource {
    context: Statuses$SelectContextResource;
    card: Statuses$SelectCardResource;
    rebloggedBy: Statuses$SelectRebloggedByResource;
    favouritedBy: Statuses$SelectFavouritedByResource;
    history: Statuses$SelectHistoryResource;
    source: Statuses$SelectSourceResource;
    /**
     * View information about a status.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    fetch(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Update a status
     * @param params Parameters
     * @return Status. When scheduled_at is present, ScheduledStatus is returned instead.
     * @see https://docs.joinmastodon.org/api/rest/statuses/#post-api-v1-statuses
     */
    update(params: UpdateStatusParams, meta?: HttpMetaParams<"json">): Promise<Status>;
    /**
     * Delete one of your own statuses.
     * @return Status with source text and `media_attachments` or `poll`
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    remove(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Add a status to your favourites list.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    favourite(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Remove a status from your favourites list.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    unfavourite(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Do not receive notifications for the thread that this status is part of. Must be a thread in which you are a participant.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    mute(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Start receiving notifications again for the thread that this status is part of.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    unmute(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Re-share a status.
     * @return Status
     * @see https://docs.joinmastodon.org/api/rest/statuses/#post-api-v1-statuses-id-reblog
     */
    reblog(params?: ReblogStatusParams, meta?: HttpMetaParams<"json">): Promise<Status>;
    /**
     * Undo a re-share of a status.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    unreblog(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Feature one of your own public statuses at the top of your profile.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    pin(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Un-feature a status from the top of your profile.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    unpin(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Privately bookmark a status.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    bookmark(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Remove a status from your private bookmarks.
     * @return Status
     * @see https://docs.joinmastodon.org/methods/statuses/
     */
    unbookmark(meta?: HttpMetaParams): Promise<Status>;
    /**
     * Translate the status content into some language.
     * @param params Form data parameters
     * @returns Translation
     */
    translate(params: TranslateStatusParams, meta?: HttpMetaParams): Promise<Translation>;
}
export interface StatusesResource {
    $select(id: string): Statuses$SelectResource;
    /**
     * Obtain information about multiple statuses.
     */
    fetch(params: FetchStatusesParams, meta?: HttpMetaParams): Promise<Status[]>;
    /**
     * Post a new status.
     * @param params Parameters
     * @return Status. When scheduled_at is present, ScheduledStatus is returned instead.
     * @see https://docs.joinmastodon.org/api/rest/statuses/#post-api-v1-statuses
     */
    create(params: CreateStatusParams, meta?: HttpMetaParams<"json">): Promise<Status>;
    create(params: CreateScheduledStatusParams, meta?: HttpMetaParams<"json">): Promise<ScheduledStatus>;
}
/** @deprecated Use `StatusesResource` instead. */
export type StatusRepository = StatusesResource;
export {};
