import type { Theme } from "@riverbankcms/blocks";
import type { APIEndpoint } from "./apiEndpointTypes";
import type { AdminCreateSiteRequest, AdminCreateSiteResponse, AdminDeletePriceOverrideRequest, AdminDeletePriceOverrideResponse, AdminDeleteSiteResponse, AdminGetPriceOverrideQuery, AdminGetPriceOverrideResponse, AdminUpsertPriceOverrideRequest, AdminUpsertPriceOverrideResponse } from "./accessAdmin";
import type { MutableCourseStatus } from "./courses";
import type { ListCustomBlocksResponse, CreateCustomBlockRequest, CreateCustomBlockResponse, DeleteCustomBlockResponse, GetCustomBlockResponse, SdkWorkflowRunStatusCallbackRequest, SdkWorkflowRunStatusCallbackResponse, UpdateCustomBlockRequest, UpdateCustomBlockResponse } from "./contentRuntime";
import type { ContentTypeRecord, CreateContentTypeRequest, CreateContentTypeResponse, DeleteContentTypeResponse, DuplicateContentTypeResponse, ListContentTypesResponse, UpdateContentTypeRequest, UpdateContentTypeResponse } from "./contentTypes";
import type { CheckRedirectQuery, CheckRedirectResponse, CreateRedirectRuleRequest, CreateRedirectRuleResponse, DeleteRedirectRuleResponse, ListRedirectRulesResponse } from "./redirects";
import type { CreateManagementKeyRequest, CreateManagementKeyResponse, CreateSiteApiKeyRequest, CreateSiteApiKeyResponse, CreateSitePreviewKeyResponse, CreateWebhookRequest, CreateWebhookResponse, DeleteBackupUploadRequest, DeleteBackupUploadResponse, DeleteWebhookResponse, GetSiteApiKeyAccessLogsResponse, GetSitePreviewKeyResponse, GetWebhookResponse, ImportBackupAsNewSiteRequest, ImportBackupAsNewSiteResponse, ImportSiteBackupRequest, ListManagementKeysResponse, ListSiteApiKeysResponse, ListWebhooksResponse, RevokeManagementKeyRequest, RevokeManagementKeyResponse, RevokeSiteApiKeyResponse, UpdateWebhookRequest, UpdateWebhookResponse, BackupImportResponse, BackupPreviewRequest, BackupPreviewResponse, CreateBackupUploadUrlRequest, CreateBackupUploadUrlResponse } from "./siteInfrastructure";
import type { GetSiteInspirationAnalysisResponse, ListSiteInspirationAnalysesResponse } from "./siteGeneration";
import type { ListGscPropertiesAdminResponse, AuthStatusResponse, CronAppointmentRemindersResponse, CronBillingStatusResponse, CronEventFeedbackEmailsResponse, CronEventOccurrencesResponse, CronEventRemindersResponse, CronMediaJobsQuery, CronMediaJobsResponse, CronNewsletterSendResponse, CronPaymentReconciliationResponse, CronSeoIngestResponse, CronWaitlistExpiryResponse } from "./siteOperations";
import type { ManagementMediaAsset, MediaResolveResponse, PushSdkConfigRequest, PushSdkConfigResponse, SdkBackfillIdentifiersResult, SdkGetCourseResponse, SdkGetEntryResponse, SdkGetEventCategoryResponse, SdkGetEventResponse, SdkGetFormResponse, SdkGetVenueResponse, SdkListCoursesResponse, SdkListEntriesResponse, SdkListEventCategoriesResponse, SdkListEventsResponse, SdkListFormsResponse, SdkListVenuesResponse, SdkMediaFinalizeUploadResponse, SdkMediaUploadUrlResponse, SdkPageResponse, SdkPublishOrUnpublishEntryResponse, SdkPullContentTypesResponse, SdkPullCourseProgram, SdkPullCourseSession, SdkPullCoursesResponse, SdkPullEntriesAllResponse, SdkPullEntriesByTypeResponse, SdkPullEntriesResponse, SdkPullEventCategoriesResponse, SdkPullEventsResponse, SdkPullEventSeries, SdkPullFooterResponse, SdkPullFormSchema, SdkPullFormsResponse, SdkPullFormSettings, SdkPullNavigationResponse, SdkPullPagesResponse, SdkPullSettings, SdkPullSettingsResponse, SdkPullSiteInfoResponse, SdkPullThemeResponse, SdkPullVenue, SdkPullVenuesResponse, SdkUpdateSettingsResponse, SdkUpsertBlockResponse, SdkUpsertCourseResponse, SdkUpsertEntryResponse, SdkUpsertEventCategoryResponse, SdkUpsertEventResponse, SdkUpsertFooterResponse, SdkUpsertFormResponse, SdkUpsertNavigationMenuResponse, SdkUpsertThemeResponse, SdkUpsertVenueResponse } from "./sdkContracts";
import type { StripeConnectDisconnectResponse, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest } from "./billing";
import type { NavigationLinkInput } from "./navigation/types";
import type { JsonValue } from "./shared-contracts";
/**
 * Site platform endpoints cover admin/configuration surfaces: redirects, webhooks,
 * keys, SDK management, content-type CRUD, backup flows, and site-level admin tools.
 */
export type SitePlatformAPIEndpoints = {
    listGscPropertiesAdmin: APIEndpoint<never, never, ListGscPropertiesAdminResponse>;
    getPublicChallenge: APIEndpoint<never, never, string>;
    checkRedirect: APIEndpoint<never, CheckRedirectQuery, CheckRedirectResponse>;
    listRedirectRules: APIEndpoint<never, {
        siteId: string;
    }, ListRedirectRulesResponse>;
    createRedirectRule: APIEndpoint<CreateRedirectRuleRequest, {
        siteId: string;
    }, CreateRedirectRuleResponse>;
    deleteRedirectRule: APIEndpoint<never, {
        siteId: string;
        ruleId: string;
    }, DeleteRedirectRuleResponse>;
    listWebhooks: APIEndpoint<never, {
        siteId: string;
    }, ListWebhooksResponse>;
    createWebhook: APIEndpoint<CreateWebhookRequest, {
        siteId: string;
    }, CreateWebhookResponse>;
    getWebhook: APIEndpoint<never, {
        siteId: string;
        webhookId: string;
    }, GetWebhookResponse>;
    updateWebhook: APIEndpoint<UpdateWebhookRequest, {
        siteId: string;
        webhookId: string;
    }, UpdateWebhookResponse>;
    deleteWebhook: APIEndpoint<never, {
        siteId: string;
        webhookId: string;
    }, DeleteWebhookResponse>;
    listSiteApiKeys: APIEndpoint<never, {
        siteId: string;
    }, ListSiteApiKeysResponse>;
    createSiteApiKey: APIEndpoint<CreateSiteApiKeyRequest, {
        siteId: string;
    }, CreateSiteApiKeyResponse>;
    revokeSiteApiKey: APIEndpoint<never, {
        siteId: string;
        keyId: string;
    }, RevokeSiteApiKeyResponse>;
    getSitePreviewKey: APIEndpoint<never, {
        siteId: string;
    }, GetSitePreviewKeyResponse>;
    createSitePreviewKey: APIEndpoint<never, {
        siteId: string;
    }, CreateSitePreviewKeyResponse>;
    getSiteApiKeyAccessLogs: APIEndpoint<never, {
        siteId: string;
        limit?: number;
        offset?: number;
    }, GetSiteApiKeyAccessLogsResponse>;
    listManagementKeys: APIEndpoint<never, {
        siteId: string;
    }, ListManagementKeysResponse>;
    createManagementKey: APIEndpoint<CreateManagementKeyRequest, {
        siteId: string;
    }, CreateManagementKeyResponse>;
    revokeManagementKey: APIEndpoint<RevokeManagementKeyRequest, {
        siteId: string;
    }, RevokeManagementKeyResponse>;
    authStatus: APIEndpoint<never, never, AuthStatusResponse>;
    pushSdkConfig: APIEndpoint<PushSdkConfigRequest, {
        siteId: string;
    }, PushSdkConfigResponse>;
    listCustomBlocks: APIEndpoint<never, {
        siteId: string;
        includeDisabled?: string;
    }, ListCustomBlocksResponse>;
    createCustomBlock: APIEndpoint<CreateCustomBlockRequest, {
        siteId: string;
    }, CreateCustomBlockResponse>;
    getCustomBlock: APIEndpoint<never, {
        siteId: string;
        blockId: string;
    }, GetCustomBlockResponse>;
    updateCustomBlock: APIEndpoint<UpdateCustomBlockRequest, {
        siteId: string;
        blockId: string;
    }, UpdateCustomBlockResponse>;
    deleteCustomBlock: APIEndpoint<never, {
        siteId: string;
        blockId: string;
    }, DeleteCustomBlockResponse>;
    listSiteInspirationAnalyses: APIEndpoint<never, {
        siteId: string;
    }, ListSiteInspirationAnalysesResponse>;
    getSiteInspirationAnalysis: APIEndpoint<never, {
        siteId: string;
        analysisId: string;
    }, GetSiteInspirationAnalysisResponse>;
    sdkIdentifiersBackfill: APIEndpoint<never, {
        siteId: string;
    }, SdkBackfillIdentifiersResult>;
    sdkMediaExists: APIEndpoint<{
        storagePath: string;
        bucket?: string;
    }, {
        siteId: string;
    }, {
        exists: boolean;
    }>;
    sdkMediaFindByChecksum: APIEndpoint<{
        checksums: string[];
    }, {
        siteId: string;
    }, {
        assets: ManagementMediaAsset[];
    }>;
    sdkMediaResolve: APIEndpoint<{
        identifiers?: string[];
        assetIds?: string[];
    }, {
        siteId: string;
    }, MediaResolveResponse>;
    sdkMediaUploadUrl: APIEndpoint<{
        filename: string;
        bytes: number;
        bucket?: string;
        storagePath?: string;
        identifier?: string;
    }, {
        siteId: string;
    }, SdkMediaUploadUrlResponse>;
    sdkMediaUploadFinalize: APIEndpoint<{
        bucket?: string;
        storagePath: string;
        filename: string;
        bytes: number;
        mimeType?: string;
        title?: string;
        identifier?: string;
    }, {
        siteId: string;
    }, SdkMediaFinalizeUploadResponse>;
    sdkMediaAssignIdentifier: APIEndpoint<{
        assetId: string;
        identifier: string | null;
        force?: boolean;
    }, {
        siteId: string;
    }, {
        asset: ManagementMediaAsset;
    }>;
    sdkUpdateWorkflowRunStatus: APIEndpoint<SdkWorkflowRunStatusCallbackRequest, {
        siteId: string;
        runId: string;
    }, SdkWorkflowRunStatusCallbackResponse>;
    sdkPullSiteInfo: APIEndpoint<never, {
        siteId: string;
    }, SdkPullSiteInfoResponse>;
    sdkPullContentTypes: APIEndpoint<never, {
        siteId: string;
    }, SdkPullContentTypesResponse>;
    sdkPullPages: APIEndpoint<never, {
        siteId: string;
    }, SdkPullPagesResponse>;
    sdkPullNavigation: APIEndpoint<never, {
        siteId: string;
    }, SdkPullNavigationResponse>;
    sdkPullSettings: APIEndpoint<never, {
        siteId: string;
    }, SdkPullSettingsResponse>;
    sdkPullForms: APIEndpoint<never, {
        siteId: string;
    }, SdkPullFormsResponse>;
    sdkPullTheme: APIEndpoint<never, {
        siteId: string;
    }, SdkPullThemeResponse>;
    sdkPullFooter: APIEndpoint<never, {
        siteId: string;
    }, SdkPullFooterResponse>;
    sdkPullVenues: APIEndpoint<never, {
        siteId: string;
    }, SdkPullVenuesResponse>;
    sdkPullEventCategories: APIEndpoint<never, {
        siteId: string;
    }, SdkPullEventCategoriesResponse>;
    sdkPullEvents: APIEndpoint<never, {
        siteId: string;
    }, SdkPullEventsResponse>;
    sdkPullCourses: APIEndpoint<never, {
        siteId: string;
    }, SdkPullCoursesResponse>;
    sdkPullEntries: APIEndpoint<never, {
        siteId: string;
        page?: number;
        limit?: number;
    }, SdkPullEntriesResponse>;
    sdkPullEntriesByType: APIEndpoint<never, {
        siteId: string;
        type: string;
        page?: number;
        limit?: number;
    }, SdkPullEntriesByTypeResponse>;
    sdkPullEntriesAll: APIEndpoint<never, {
        siteId: string;
    }, SdkPullEntriesAllResponse>;
    sdkUpsertPage: APIEndpoint<{
        identifier: string;
        title: string;
        path: string;
        seoTitle?: string;
        seoDescription?: string;
    }, {
        siteId: string;
    }, SdkPageResponse>;
    sdkPublishPage: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, SdkPageResponse>;
    sdkUnpublishPage: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, SdkPageResponse>;
    sdkUpsertPageBlock: APIEndpoint<{
        identifier: string;
        kind: string;
        data: Record<string, unknown>;
        position?: number;
    }, {
        siteId: string;
        identifier: string;
    }, SdkUpsertBlockResponse>;
    sdkDeletePageBlock: APIEndpoint<never, {
        siteId: string;
        identifier: string;
        blockIdentifier: string;
    }, {
        deleted: true;
    }>;
    sdkReorderPageBlocks: APIEndpoint<{
        identifiers: string[];
    }, {
        siteId: string;
        identifier: string;
    }, {
        reordered: true;
    }>;
    sdkUpsertNavigationMenu: APIEndpoint<{
        name: string;
        isPrimary?: boolean;
        isFooter?: boolean;
        items: Array<{
            label: string;
            isCta?: boolean;
            link?: NavigationLinkInput;
            children?: unknown[];
        }>;
    }, {
        siteId: string;
    }, SdkUpsertNavigationMenuResponse>;
    sdkUpsertTheme: APIEndpoint<{
        theme: Theme;
        themeId?: string;
        selectionId?: string;
    }, {
        siteId: string;
    }, SdkUpsertThemeResponse>;
    sdkUpsertFooter: APIEndpoint<{
        bottomText?: Record<string, JsonValue> | null;
    }, {
        siteId: string;
    }, SdkUpsertFooterResponse>;
    sdkListForms: APIEndpoint<never, {
        siteId: string;
    }, SdkListFormsResponse>;
    sdkUpsertForm: APIEndpoint<{
        slug: string;
        name: string;
        schema: SdkPullFormSchema;
        settings?: SdkPullFormSettings;
    }, {
        siteId: string;
    }, SdkUpsertFormResponse>;
    sdkGetForm: APIEndpoint<never, {
        siteId: string;
        slug: string;
    }, SdkGetFormResponse>;
    sdkDeleteForm: APIEndpoint<never, {
        siteId: string;
        slug: string;
    }, {
        deleted: true;
    }>;
    sdkListVenues: APIEndpoint<never, {
        siteId: string;
    }, SdkListVenuesResponse>;
    sdkUpsertVenue: APIEndpoint<{
        slug: string;
        title: string;
        description?: string | null;
        timezone?: string | null;
        capacity?: number | null;
        address?: SdkPullVenue["address"];
        location?: SdkPullVenue["location"];
        mapEmbed?: string | null;
    }, {
        siteId: string;
    }, SdkUpsertVenueResponse>;
    sdkGetVenue: APIEndpoint<never, {
        siteId: string;
        slug: string;
    }, SdkGetVenueResponse>;
    sdkDeleteVenue: APIEndpoint<never, {
        siteId: string;
        slug: string;
    }, {
        deleted: true;
    }>;
    sdkListEventCategories: APIEndpoint<never, {
        siteId: string;
    }, SdkListEventCategoriesResponse>;
    sdkUpsertEventCategory: APIEndpoint<{
        identifier: string;
        name: string;
        description?: string | null;
        color?: string | null;
        sortOrder?: number;
    }, {
        siteId: string;
    }, SdkUpsertEventCategoryResponse>;
    sdkGetEventCategory: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, SdkGetEventCategoryResponse>;
    sdkDeleteEventCategory: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, {
        deleted: true;
    }>;
    sdkListEvents: APIEndpoint<never, {
        siteId: string;
    }, SdkListEventsResponse>;
    sdkUpsertEvent: APIEndpoint<{
        identifier: string;
        title: string;
        slug: string;
        status?: SdkPullEventSeries["status"];
        visibility?: SdkPullEventSeries["visibility"];
        schedule: SdkPullEventSeries["schedule"];
        capacity?: number | null;
        pricing?: Partial<SdkPullEventSeries["pricing"]>;
        venueRef?: string | null;
        categoryRef?: string | null;
        content?: SdkPullEventSeries["content"];
        formRef?: string | null;
        settings?: Record<string, unknown>;
        presentation?: Record<string, unknown> | null;
        tags?: string[];
    }, {
        siteId: string;
    }, SdkUpsertEventResponse>;
    sdkGetEvent: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, SdkGetEventResponse>;
    sdkDeleteEvent: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, {
        deleted: true;
    }>;
    sdkListCourses: APIEndpoint<never, {
        siteId: string;
    }, SdkListCoursesResponse>;
    sdkUpsertCourse: APIEndpoint<{
        identifier: string;
        title: string;
        slug: string;
        status?: MutableCourseStatus;
        visibility?: "private" | "public" | "unlisted";
        venueRef?: string | null;
        categoryRef?: string | null;
        formRef?: string | null;
        capacity?: number | null;
        enrollmentCapacity?: number | null;
        acceptsMemberships?: boolean;
        priceCents?: number | null;
        currency?: string;
        sessions: SdkPullCourseSession[];
        programRef?: string | null;
        program?: SdkPullCourseProgram | null;
    }, {
        siteId: string;
    }, SdkUpsertCourseResponse>;
    sdkGetCourse: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, SdkGetCourseResponse>;
    sdkDeleteCourse: APIEndpoint<never, {
        siteId: string;
        identifier: string;
    }, {
        deleted: true;
    }>;
    sdkUpsertEntry: APIEndpoint<{
        identifier: string;
        contentType: string;
        data: Record<string, unknown>;
        slug?: string;
    }, {
        siteId: string;
    }, SdkUpsertEntryResponse>;
    sdkListEntries: APIEndpoint<never, {
        siteId: string;
        contentType: string;
        page?: number;
        limit?: number;
    }, SdkListEntriesResponse>;
    sdkGetEntry: APIEndpoint<never, {
        siteId: string;
        contentType: string;
        identifier: string;
    }, SdkGetEntryResponse>;
    sdkDeleteEntry: APIEndpoint<never, {
        siteId: string;
        contentType: string;
        identifier: string;
    }, {
        deleted: true;
    }>;
    sdkPublishEntry: APIEndpoint<never, {
        siteId: string;
        contentType: string;
        identifier: string;
    }, SdkPublishOrUnpublishEntryResponse>;
    sdkUnpublishEntry: APIEndpoint<never, {
        siteId: string;
        contentType: string;
        identifier: string;
    }, SdkPublishOrUnpublishEntryResponse>;
    sdkUpdateSettings: APIEndpoint<{
        homepageId?: string | null;
        seoDefaults?: SdkPullSettings["seoDefaults"];
        logoIdentifier?: string | null;
        faviconIdentifier?: string | null;
    }, {
        siteId: string;
    }, SdkUpdateSettingsResponse>;
    listSiteContentTypes: APIEndpoint<never, {
        siteId: string;
    }, ListContentTypesResponse>;
    getContentType: APIEndpoint<never, {
        siteId: string;
        typeId: string;
    }, {
        contentType: ContentTypeRecord;
    }>;
    createContentType: APIEndpoint<CreateContentTypeRequest, {
        siteId: string;
    }, CreateContentTypeResponse>;
    updateContentType: APIEndpoint<UpdateContentTypeRequest, {
        siteId: string;
        typeId: string;
    }, UpdateContentTypeResponse>;
    deleteContentType: APIEndpoint<never, {
        siteId: string;
        typeId: string;
    }, DeleteContentTypeResponse>;
    duplicateContentType: APIEndpoint<{
        newKey: string;
    }, {
        siteId: string;
        typeId: string;
    }, DuplicateContentTypeResponse>;
    adminCreateSite: APIEndpoint<AdminCreateSiteRequest, never, AdminCreateSiteResponse>;
    adminDeleteSite: APIEndpoint<never, {
        siteId: string;
    }, AdminDeleteSiteResponse>;
    stripeConnectStart: APIEndpoint<never, {
        siteId: string;
    }, StripeConnectStartResponse>;
    stripeConnectStatus: APIEndpoint<never, {
        siteId: string;
    }, StripeConnectStatusResponse>;
    stripeAutomaticTaxUpdate: APIEndpoint<UpdateStripeAutomaticTaxRequest, {
        siteId: string;
    }, StripeConnectStatusResponse>;
    stripeConnectDisconnect: APIEndpoint<never, {
        siteId: string;
    }, StripeConnectDisconnectResponse>;
    billingConnectReturn: APIEndpoint<never, {
        token?: string;
    }, void>;
    billingConnectRefresh: APIEndpoint<never, {
        token?: string;
    }, void>;
    adminGetPriceOverride: APIEndpoint<never, AdminGetPriceOverrideQuery, AdminGetPriceOverrideResponse>;
    adminUpsertPriceOverride: APIEndpoint<AdminUpsertPriceOverrideRequest, never, AdminUpsertPriceOverrideResponse>;
    adminDeletePriceOverride: APIEndpoint<AdminDeletePriceOverrideRequest, never, AdminDeletePriceOverrideResponse>;
    importSiteBackup: APIEndpoint<ImportSiteBackupRequest, {
        siteId: string;
    }, BackupImportResponse>;
    createBackupUploadUrl: APIEndpoint<CreateBackupUploadUrlRequest, never, CreateBackupUploadUrlResponse>;
    deleteBackupUpload: APIEndpoint<DeleteBackupUploadRequest, never, DeleteBackupUploadResponse>;
    previewBackup: APIEndpoint<BackupPreviewRequest, never, BackupPreviewResponse>;
    importBackupAsNewSite: APIEndpoint<ImportBackupAsNewSiteRequest, never, ImportBackupAsNewSiteResponse>;
    webhookEmailResend: APIEndpoint<never, never, string>;
    webhookStripeConnect: APIEndpoint<never, never, string>;
    webhookStripeConnectBookings: APIEndpoint<never, never, string>;
    webhookStripePlatform: APIEndpoint<never, never, string>;
    cronEventReminders: APIEndpoint<never, never, CronEventRemindersResponse>;
    cronEventFeedbackEmails: APIEndpoint<never, never, CronEventFeedbackEmailsResponse>;
    cronEventOccurrences: APIEndpoint<never, never, CronEventOccurrencesResponse>;
    cronAppointmentReminders: APIEndpoint<never, never, CronAppointmentRemindersResponse>;
    cronNewsletterSend: APIEndpoint<never, never, CronNewsletterSendResponse>;
    cronBillingStatus: APIEndpoint<never, never, CronBillingStatusResponse>;
    cronMediaJobs: APIEndpoint<never, CronMediaJobsQuery, CronMediaJobsResponse>;
    cronPaymentReconciliation: APIEndpoint<never, never, CronPaymentReconciliationResponse>;
    cronWaitlistExpiry: APIEndpoint<never, never, CronWaitlistExpiryResponse>;
    cronSeoIngest: APIEndpoint<never, never, CronSeoIngestResponse>;
    cronSeoIngestPost: APIEndpoint<never, never, CronSeoIngestResponse>;
    adminGscVerifyStart: APIEndpoint<{
        siteId: string;
        siteUrl: string;
    }, never, {
        token?: string;
        tag?: string;
        reason?: string;
    }>;
    adminGscVerifyConfirm: APIEndpoint<{
        siteId: string;
        siteUrl: string;
    }, never, {
        ok: boolean;
        verifiedAt?: string;
        reason?: string;
    }>;
    adminGscMetaPersist: APIEndpoint<{
        siteId: string;
        enabled: boolean;
    }, never, {
        ok: boolean;
        error?: string;
    }>;
    adminSeoIngestRun: APIEndpoint<{
        siteId: string;
    }, never, {
        ok: boolean;
        error?: string;
        result?: {
            processed: number;
            updatedMeta: number;
            skipped: number;
            apiRequests: number;
        };
    }>;
};
