/**
 * @module
 *
 * Denim - A Deno/TypeScript library for the Threads API.
 * Provides complete coverage of all Threads API endpoints including
 * posting, retrieval, replies, insights, search, locations, and more.
 */

// ─── Types ───────────────────────────────────────────────────────────────────
import type {
	AuthCodeResponse,
	CursorPaginationOptions,
	DebugTokenInfo,
	GifAttachment,
	InsightValue,
	KeywordSearchOptions,
	LocationSearchOptions,
	MediaInsight,
	MediaInsightsResponse,
	MediaType,
	MockThreadsAPI,
	OEmbedResponse,
	PaginationOptions,
	PollAttachment,
	PollAttachmentInput,
	PublicProfile,
	PublishingLimit,
	QuotaConfig,
	ReplyControl,
	ResponseMediaType,
	TextAttachment,
	TextAttachmentInput,
	TextEntity,
	ThreadsContainer,
	ThreadsListResponse,
	ThreadsLocation,
	ThreadsPost,
	ThreadsPostRequest,
	ThreadsProfile,
	TokenResponse,
	UserInsight,
	UserInsightsOptions,
	UserInsightsResponse,
	WebhookDeleteValue,
	WebhookMentionValue,
	WebhookPayload,
	WebhookPublishValue,
	WebhookReplyValue,
} from "./src/types.ts";

export type {
	AuthCodeResponse,
	CursorPaginationOptions,
	DebugTokenInfo,
	GifAttachment,
	InsightValue,
	KeywordSearchOptions,
	LocationSearchOptions,
	MediaInsight,
	MediaInsightsResponse,
	MediaType,
	MockThreadsAPI,
	OEmbedResponse,
	PaginationOptions,
	PollAttachment,
	PollAttachmentInput,
	PublicProfile,
	PublishingLimit,
	QuotaConfig,
	ReplyControl,
	ResponseMediaType,
	TextAttachment,
	TextAttachmentInput,
	TextEntity,
	ThreadsContainer,
	ThreadsListResponse,
	ThreadsLocation,
	ThreadsPost,
	ThreadsPostRequest,
	ThreadsProfile,
	TokenResponse,
	UserInsight,
	UserInsightsOptions,
	UserInsightsResponse,
	WebhookDeleteValue,
	WebhookMentionValue,
	WebhookPayload,
	WebhookPublishValue,
	WebhookReplyValue,
};

// ─── Publishing ──────────────────────────────────────────────────────────────
export { createCarouselItem } from "./src/api/createCarouselItem.ts";
export { createThreadsContainer } from "./src/api/createThreadsContainer.ts";
export { deleteThread } from "./src/api/deleteThread.ts";
export { publishThreadsContainer } from "./src/api/publishThreadsContainer.ts";
export { repost } from "./src/api/repost.ts";

// ─── Retrieval ───────────────────────────────────────────────────────────────
export { getGhostPosts } from "./src/api/getGhostPosts.ts";
export { getSingleThread } from "./src/api/getSingleThread.ts";
export { getThreadsList } from "./src/api/getThreadsList.ts";

// ─── Profiles ────────────────────────────────────────────────────────────────
export { getProfile } from "./src/api/getProfile.ts";
export { getProfilePosts } from "./src/api/getProfilePosts.ts";
export { lookupProfile } from "./src/api/lookupProfile.ts";

// ─── Replies ─────────────────────────────────────────────────────────────────
export { getConversation } from "./src/api/getConversation.ts";
export { getReplies } from "./src/api/getReplies.ts";
export { getUserReplies } from "./src/api/getUserReplies.ts";
export { manageReply } from "./src/api/manageReply.ts";

// ─── Mentions ────────────────────────────────────────────────────────────────
export { getMentions } from "./src/api/getMentions.ts";

// ─── Insights ────────────────────────────────────────────────────────────────
export { getMediaInsights } from "./src/api/getMediaInsights.ts";
export { getUserInsights } from "./src/api/getUserInsights.ts";

// ─── Search ──────────────────────────────────────────────────────────────────
export { getLocation } from "./src/api/getLocation.ts";
export { searchKeyword } from "./src/api/searchKeyword.ts";
export { searchLocations } from "./src/api/searchLocations.ts";

// ─── Tokens ──────────────────────────────────────────────────────────────────
export { debugToken } from "./src/api/debugToken.ts";
export { exchangeCodeForToken } from "./src/api/exchangeCodeForToken.ts";
export { exchangeToken } from "./src/api/exchangeToken.ts";
export { getAppAccessToken } from "./src/api/getAppAccessToken.ts";
export { refreshToken } from "./src/api/refreshToken.ts";

// ─── oEmbed ──────────────────────────────────────────────────────────────────
export { getOEmbed } from "./src/api/getOEmbed.ts";

// ─── Rate Limits ─────────────────────────────────────────────────────────────
export { getPublishingLimit } from "./src/api/getPublishingLimit.ts";

// ─── Utilities ───────────────────────────────────────────────────────────────
export { checkContainerStatus } from "./src/utils/checkContainerStatus.ts";
export { validateRequest } from "./src/utils/validateRequest.ts";

// ─── Testing ─────────────────────────────────────────────────────────────────
export { MockThreadsAPIImpl } from "./src/utils/mock_threads_api.ts";
