import { z } from 'zod';
import React from 'react';
import { AccelbyteSDK, ApiArgs } from '@accelbyte/sdk';

interface SupportPageProps {
    manageArticleURL?: string;
}

declare function SupportPageWidget(props: SupportPageProps): JSX.Element;

interface ArticlesPageProps {
    topicSlug: string;
}

declare function ArticlesPageWidget(props: ArticlesPageProps): JSX.Element;

declare enum TopicStatus {
    VISIBLE = "VISIBLE",
    HIDDEN = "HIDDEN"
}
declare enum ArticleStatus {
    DRAFT = "DRAFT",
    PUBLISHED = "PUBLISHED"
}
declare const Topic: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodString;
    slug: z.ZodString;
    description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
    status: z.ZodEnum<[TopicStatus.HIDDEN, TopicStatus.VISIBLE]>;
    icon: z.ZodNullable<z.ZodOptional<z.ZodString>>;
    displayOrder: z.ZodNumber;
    createdAt: z.ZodString;
    updatedAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    icon?: string | null | undefined;
    description?: string | null | undefined;
    name: string;
    id: string;
    status: TopicStatus;
    updatedAt: string;
    createdAt: string;
    slug: string;
    displayOrder: number;
}, {
    icon?: string | null | undefined;
    description?: string | null | undefined;
    name: string;
    id: string;
    status: TopicStatus;
    updatedAt: string;
    createdAt: string;
    slug: string;
    displayOrder: number;
}>;
interface Topic extends z.TypeOf<typeof Topic> {
}
declare const Article: z.ZodObject<{
    id: z.ZodString;
    title: z.ZodString;
    slug: z.ZodString;
    rawContent: z.ZodNullable<z.ZodOptional<z.ZodString>>;
    htmlContent: z.ZodNullable<z.ZodOptional<z.ZodString>>;
    status: z.ZodEnum<[ArticleStatus.DRAFT, ArticleStatus.PUBLISHED]>;
    metaDescription: z.ZodString;
    metaTitle: z.ZodString;
    createdAt: z.ZodString;
    updatedAt: z.ZodString;
    topic: z.ZodObject<Pick<{
        id: z.ZodString;
        name: z.ZodString;
        slug: z.ZodString;
        description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
        status: z.ZodEnum<[TopicStatus.HIDDEN, TopicStatus.VISIBLE]>;
        icon: z.ZodNullable<z.ZodOptional<z.ZodString>>;
        displayOrder: z.ZodNumber;
        createdAt: z.ZodString;
        updatedAt: z.ZodString;
    }, "name" | "id" | "description" | "slug">, "strip", z.ZodTypeAny, {
        description?: string | null | undefined;
        name: string;
        id: string;
        slug: string;
    }, {
        description?: string | null | undefined;
        name: string;
        id: string;
        slug: string;
    }>;
}, "strip", z.ZodTypeAny, {
    rawContent?: string | null | undefined;
    htmlContent?: string | null | undefined;
    title: string;
    id: string;
    status: ArticleStatus;
    updatedAt: string;
    topic: {
        description?: string | null | undefined;
        name: string;
        id: string;
        slug: string;
    };
    createdAt: string;
    slug: string;
    metaDescription: string;
    metaTitle: string;
}, {
    rawContent?: string | null | undefined;
    htmlContent?: string | null | undefined;
    title: string;
    id: string;
    status: ArticleStatus;
    updatedAt: string;
    topic: {
        description?: string | null | undefined;
        name: string;
        id: string;
        slug: string;
    };
    createdAt: string;
    slug: string;
    metaDescription: string;
    metaTitle: string;
}>;
interface Article extends z.TypeOf<typeof Article> {
}
interface ArticlePayload extends Omit<Article, 'topic' | 'slug' | 'createdAt' | 'updatedAt' | 'rawContent' | 'htmlContent'> {
    rawContent: string;
    htmlContent: string;
    topicId: string;
}

interface ArticleDetailPageProps {
    articleSlug: string;
    defaultArticle?: Article;
}

declare function ArticleDetailPageWidget(props: ArticleDetailPageProps): JSX.Element;

interface SupportCTAProps {
    CTAIcon?: React.ReactNode;
}

declare function SupportCTAWidget(props: SupportCTAProps): JSX.Element;

declare function ArticleListPageWidget(): JSX.Element;

declare function CreateArticlePageWidget(): JSX.Element;

declare function EditArticlePageWidget({ slug }: {
    slug: string;
}): JSX.Element;

declare function TopicListWidget(): JSX.Element;

declare function CreateTopicPageWidget(): JSX.Element;

interface EditTopicPageWidgetProps {
    slug: string;
}
declare function EditTopicPageWidget({ slug }: EditTopicPageWidgetProps): JSX.Element;

declare function ManageContentPageWidget({ children }: {
    children: React.ReactNode;
}): JSX.Element;

/**
 * NOT AUTO GENERATED
 */

declare function ArticlesApi(sdk: AccelbyteSDK, args?: ApiArgs): {
    getArticles: () => Promise<Article[]>;
    deleteArticle: (id: string) => Promise<unknown>;
    getArticleById: (id: string) => Promise<Article>;
    getArticleBySlug: (slug: string) => Promise<Article>;
    createArticle: (payload: Omit<ArticlePayload, 'id'>) => Promise<unknown>;
    updateArticle: (data: ArticlePayload) => Promise<unknown>;
    getPublicArticles: (queryParams?: {
        topicId?: string | undefined;
    } | undefined) => Promise<Article[]>;
    getPublicArticleBySlug: (slug: string) => Promise<Article>;
};

declare function TopicsApi(sdk: AccelbyteSDK, args?: ApiArgs): {
    getTopics: () => Promise<Topic[]>;
    getTopicById: (id: string) => Promise<Topic>;
    getTopicBySlug: (slug: string) => Promise<Topic>;
    createTopic: (data: any) => Promise<Topic>;
    updateTopic: (id: string, data: any) => Promise<unknown>;
    deleteTopic: (id: string) => Promise<unknown>;
    getPublicTopics: (status?: "VISIBLE" | "HIDDEN" | undefined) => Promise<Topic[]>;
    getPublicTopicBySlug: (slug: string) => Promise<Topic>;
};

export { Article, ArticleDetailPageProps, ArticleDetailPageWidget, ArticleListPageWidget, ArticlesApi, ArticlesPageProps, ArticlesPageWidget, CreateArticlePageWidget, CreateTopicPageWidget, EditArticlePageWidget, EditTopicPageWidget, EditTopicPageWidgetProps, ManageContentPageWidget, SupportCTAProps, SupportCTAWidget, SupportPageProps, SupportPageWidget, Topic, TopicListWidget, TopicsApi };
