import type { IActivityLogState } from "@ax/containers/ActivityLog/reducer";
import type { IAnalyticsState } from "@ax/containers/Analytics/reducer";
import type { IAppState } from "@ax/containers/App/reducer";
import type { IDomainsState } from "@ax/containers/Domains/reducer";
import type { IFileDriveState } from "@ax/containers/FileDrive/reducer";
import type { IFormsState } from "@ax/containers/Forms/reducer";
import type { IGalleryState } from "@ax/containers/Gallery/reducer";
import type { IIntegrationsState } from "@ax/containers/Integrations/reducer";
import type { INavigationState } from "@ax/containers/Navigation/Defaults/reducer";
import type { IMenuState } from "@ax/containers/Navigation/Menu/reducer";
import type { IPageEditorState } from "@ax/containers/PageEditor/reducer";
import type { IRedirectsState } from "@ax/containers/Redirects/reducer";
import type { IDataPacksState } from "@ax/containers/Settings/DataPacks/reducer";
import type { ILanguageState } from "@ax/containers/Settings/Languages/reducer";
import type { ISitesState } from "@ax/containers/Sites/reducer";
import type { IStructuredDataState } from "@ax/containers/StructuredData/reducer";
import type { IUsersState } from "@ax/containers/Users/reducer";

import type {
	IFile,
	IFilesFolder,
	IFileUseItem,
	IFileUsePages,
	IFolder,
	IFolderTree,
	IGetFolderParams,
	IImage,
	IImageFolder,
} from "./files";
import type {
	FormCategoriesList,
	FormCategoriesOrderParams,
	FormCategory,
	FormContent,
	FormLanguage,
	FormState,
	GetFormsParams,
	ListForm,
	PostFormCategoryParams,
	PutFormCategoryParams,
} from "./forms";
import type { ILogContent, ILogItemsByDay, ILogItemsByUser } from "./logs";

export interface IBreadcrumbItem {
	editorID: number;
	component: string;
	displayName: string;
}

export interface ICheck {
	value: any;
	isChecked: boolean;
}

export interface IModule {
	editorID: number;
	component: string;
	fixed?: boolean;
	[key: string]: any; // TODO: set type
}

export interface IPageLiveStatus {
	id: number;
	status: string;
	title: string;
}

export interface IPageWorkflowStatus {
	id: number;
	color: string;
	text: string;
}

export interface IFullPath {
	site: string;
	domaing: string;
	language: string;
	page: string;
	compose: string;
}

export interface IAPIPage {
	id: number;
	component: string;
	slug: string;
	title: string;
	sections?: IModule[];
	site: number | null;
	liveStatus: IPageLiveStatus;
	workflowStatus: IPageWorkflowStatus | null;
	metaTitle: string;
	metaDescription: string;
	isIndexed: boolean;
	canonicalURL: string;
	follow: boolean;
	metasAdvanced: string;
	rsTitle: string;
	rsDescription: string;
	rsImage: IImage;
	modified: Date;
	deleted: boolean;
	entity?: string;
	pageLanguages: IPageLanguage[];
	template: any;
	isHome: boolean;
	fullUrl: string;
	fullPath: IFullPath;
	templateConfig: any;
	header: number | null | Record<string, unknown>;
	footer: number | null | Record<string, unknown>;
	availableSites: { id: number; name: string }[] | null;
	structuredData: string;
	origin: string;
	canBeUnpublished: boolean;
	editing: IUserEditing | null;
	manuallyImported: boolean;
	originalGlobalPage?: number;
	haveDraftPage: number | null;
	draftFromPage: number | null;
	liveChanged: boolean;
	templateId: string;
	structuredDataContent: Record<string, []>;
	canBeTranslated: boolean;
	originalLanguage: number;
	language: number;
	publicationScheduled: string | null;
	schemaVersionTimestamp: string;
}

export interface IPage extends IAPIPage {
	editorID: number;
	isGlobal?: boolean;
}

export interface IGetSitesParams {
	token?: string;
	language?: number;
	recentSitesNumber?: number;
	pagination?: boolean;
	page?: number;
	itemsPerPage?: number;
	searchQuery?: string;
	filterQuery?: string;
}

export interface ISite {
	author: string;
	id: number;
	name: string;
	home?: string;
	pages: IPage[];
	published: string;
	isPublished: boolean;
	updated: boolean;
	theme: string;
	defaultLanguage: number | null;
	path: string;
	timezone: string;
	favicon: string | null;
	smallAvatar: string | null;
	bigAvatar: string | null;
	thumbnail: string | null;
	domain: number | null;
	lastAccess?: string;
	navigationModules: {
		header: string;
		footer: string;
	} | null;
	hidden: boolean;
	showSitemapInRobots: boolean;
}

export interface IRecentSite {
	lastAccess: string;
	siteId: number;
}

export interface ISiteListConfig {
	displayRecentSites: boolean;
	mode: string;
	filter: string;
	filterValues: { order: IQueryValue[]; liveStatus: IQueryValue[] };
	sortedListStatus: {
		isAscending: boolean;
		sortedByDateCreated: boolean;
		sortedByLastAccess: boolean;
		sortedByTitle: boolean;
	};
}

export interface ISchema {
	title: string;
	component: string;
	type: any;
	// Este type está en any porque puede ser string | object
	// Si ponemos el type de abajo da errores de tipado y hay que refactorizar.
	// Esto pasa porque en los templates type es un objeto y en los modulos un string.
	// type:
	// 	| string
	// 	| {
	// 			label: string;
	// 			value: string;
	// 			mode?: "list" | "detail" | "paginated-data" | "virtual-list";
	// 			special?: "404" | "sitemap";
	// 	  };
	configTabs: ISchemaTab[];
	schemaType: string;
	displayName?: string;
	thumbnails?: Record<string, string>;
	category?: string;
	styles?: Record<string, string>;
	maxModulesPerPage?: number;
	content?: ISchemaField[];
	singleInstance?: boolean;
	[key: string]: any;
	default?: {
		title?: string | { content: string };
		[key: string]: any;
	};
}

export interface ISchemaTab {
	title: string;
	fields: ISchemaField[];
}

export interface ISchemaField {
	title: string;
	type: string;
	key: string;
	fields?: ISchemaField[];
	hidden?: boolean;
	whiteList?: string[];
	readonly?: boolean;
	slugTo?: string;
	reference?: string;
	overwrite?: boolean;
	[key: string]: any; // TODO: set type
}

export interface IUrlField {
	href?: string | null;
	linkTo?: any;
	linkToURL?: string | null;
	newTab?: boolean;
	noFollow?: boolean;
	anchor?: string;
	title?: string;
	subSlug?: string;
}

export interface IHeadingField {
	content?: string;
	tag?: string;
}

export interface IRootState {
	router: any;
	app: IAppState;
	sites: ISitesState;
	pageEditor: IPageEditorState;
	menu: IMenuState;
	navigation: INavigationState;
	structuredData: IStructuredDataState;
	languages: ILanguageState;
	dataPacks: IDataPacksState;
	social: ISocialState;
	users: IUsersState;
	gallery: IGalleryState;
	domains: IDomainsState;
	redirects: IRedirectsState;
	analytics: IAnalyticsState;
	integrations: IIntegrationsState;
	fileDrive: IFileDriveState;
	forms: IFormsState;
	activityLog: IActivityLogState;
}

export interface IStyledProps {
	theme: ITheme;
}

export interface ITheme {
	color: IThemeColor;
	spacing: IThemeSpacing;
	textStyle: IThemeTextStyle;
}

export interface IThemeColor {
	uiBackground01: string;
	uiBackground02: string;
	uiBarBackground: string;
	uiSiteMenu: string;
	uiMainMenuBackground: string;
	uiSnackbarSurface: string;
	textHighEmphasis: string;
	textMediumEmphasis: string;
	textLowEmphasis: string;
	textHighEmphasisInverse: string;
	textMediumEmphasisInverse: string;
	textLowEmphasisInverse: string;
	iconHighEmphasis: string;
	iconMediumEmphasis: string;
	iconNonActive: string;
	iconHighEmphasisInverse: string;
	iconMediumEmphasisInverse: string;
	iconLowEmphasisInverse: string;
	uiLine: string;
	uiLineInverse: string;
	interactive01: string;
	interactiveInactive: string;
	interactiveDisabled: string;
	interactive02: string;
	interactiveBackground: string;
	overlayFocusDark: string;
	overlayHoverDark: string;
	overlayPressedDark: string;
	overlayFocusPrimary: string;
	overlayHoverPrimary: string;
	overlayPressedPrimary: string;
	error: string;
}

export interface IThemeTextStyle {
	headingL: string;
	headingM: string;
	headingS: string;
	headingXS: string;
	headingXXS: string;
	uiL: string;
	uiM: string;
	uiS: string;
	uiXS: string;
	uiButton: string;
	fieldContent: string;
	fieldLabel: string;
}

export interface IThemeSpacing {
	xxs: string;
	xs: string;
	s: string;
	m: string;
	l: string;
	xl: string;
}

export interface ISavePageParams {
	site: any;
	page: IPage;
	pageID?: number;
}

export interface IGetPagesParams {
	deleted: boolean;
	page?: number;
	itemsPerPage?: number;
	langID?: number;
	query?: string;
	lang?: number;
	filterStructuredData?: string;
	format?: string;
	filterPages?: number[];
	filterSites?: number[];
	ignoreLang?: boolean;
	type?: "unique" | "structuredData";
}

export interface IGetSitePagesParams extends IGetPagesParams {
	siteID: number | "global";
}

export interface IGetGlobalPagesParams {
	dataID?: number;
	deleted: boolean;
	page: number;
	itemsPerPage: number;
	query?: string;
	filterQuery?: string;
	filterStructuredData?: boolean | string;
	excludeSite?: number;
	liveStatus?: string;
	format?: string;
}

export interface IGetStructuredDataParams {
	dataID?: string | null;
	page: number;
	itemsPerPage: number;
	pagination: boolean;
	deleted: boolean;
	include_draft: boolean;
	query?: string;
	filterQuery?: string;
	relatedFields?: boolean;
	order?: string;
	lang?: number;
	groupingCategories?: boolean;
}

export interface IMenu {
	component: string;
	elements: IMenuItem[];
	id: number;
	name: string;
}

export interface IMenuItem {
	id: number;
	name: string;
	editorID?: number;
	label: string;
	url: string;
	auxText: string;
	children: IMenuItem[];
	image?: IImage | string | null;
	collapsed?: boolean;
	config: IMenuItemConfig | null;
	parentEditorID?: number;
	special: boolean;
}

export interface IMenuItemConfig {
	type?: string;
	headerStyle?: string;
	footerStyle?: string;
}

export interface IMenuForm {
	url: any;
	label: string;
	type: string;
	headerStyle: string;
	footerStyle: string;
}

export interface INavigation {
	id?: number;
	component: string;
	deleted?: boolean;
	entity: string;
	language: number;
	navigationLanguages: INavigationLanguage[];
	setAsDefault: boolean;
	site: number;
	title: string;
	type: "header" | "footer";
	[key: string]: any; // TODO: set type
}

export interface IHeader {
	component: string;
	deleted?: boolean;
	entity: string;
	id: number;
	language: number;
	logo?: any;
	logoWhite?: any;
	mainMenu: any | null;
	navigationLanguages: INavigationLanguage[];
	note01: any;
	notificationBanner: boolean;
	primaryLink: any | null;
	school: string;
	secondaryLink: any | null;
	setAsDefault: boolean;
	showSearchFeature: boolean;
	showSocialMedia: boolean;
	showTopNavigation: boolean;
	site: number;
	sticky: boolean;
	title: string;
	topMenu: string;
	type: string;
}

export interface IFooter {
	id: number;
	component: string;
	layout: string;
	logo: IImage;
	legalText: string;
	legalMenu: IMenu;
	language: number;
	setAsDefault: boolean;
	entity: string;
	site: number;
	title: string;
	type: string;
	navigationLanguages: INavigationLanguage[];
	addButton?: any;
	copyrightText?: string;
	deleted: boolean;
	footerMenu?: string;
	name: string;
	school?: any;
	showWebLinks: boolean;
	theme: string;
}

export interface IStructuredData {
	id: string;
	title: string;
	local: boolean;
	taxonomy: boolean;
	fromPage: boolean;
	translate: boolean;
	schema: {
		fields: ISchemaField[];
		templates?: string[];
	};
	clone: any;
	structuredData?: string;
	editable: boolean;
	dataPacks: string[];
	private?: boolean;
	exportable?: boolean;
	relatedCategories: string[];
	defaultValues: any;
}

export interface IDataLanguage {
	id: number;
	language: number;
	site: null | number;
	page: null | number;
}

export interface IPageLanguage {
	languageId: number;
	locale: string;
	pageId: number;
	path: string | null;
	title: string;
	url: string | null;
}

export interface INavigationLanguage {
	languageId: number;
	language: string;
	locale: string;
	navigationId: number;
}

export interface IAvailableSites {
	id: number;
	name: string;
}

export interface IRelatedPage {
	availableSites: IAvailableSites[];
	editable: boolean;
	manuallyImported: boolean;
	origin: string;
	pageId: number;
	url: string;
	originalPageId: number;
	originalStructuredDataId: number;
}

export interface IStructuredDataContent {
	id: number;
	title: string;
	content: any;
	draft: boolean;
	schema: any;
	modified: Date;
	language: number;
	relatedSite?: number | null;
	relatedPage?: IRelatedPage;
	dataLanguages: IDataLanguage[];
	entity: string | null;
	structuredData: string;
	fromPage: boolean;
	dataPacks: string[];
	publicationScheduled: string | null;
	schemaVersionTimestamp: string;
}

export interface IStructuredDataCategory {
	contentId: number;
	type: "category";
	structuredData: string;
	parentGroup: number;
	position: number;
	id: number;
	relatedSite: number | null;
	relatedPage: number | null;
	content: { title: string; code: string };
	entity: string | null;
	draft: boolean;
	published: Date;
	modified: Date;
	deleted: boolean;
	pendingPublishing: boolean;
	language: number;
	originalLanguage: number;
	canBeTranslated: boolean;
	dataLanguages: IDataLanguage[];
	children: (ICategoryGroup | IStructuredDataCategory)[];
	collapsed?: boolean;
}

export interface ICategoryGroup {
	id: number;
	type: "group";
	structuredData: string;
	parentGroup: number;
	position: number;
	selectable: boolean;
	content: { title: string };
	language: number;
	children: (ICategoryGroup | IStructuredDataCategory)[];
	collapsed?: boolean;
	entity: string | null;
	dataLanguages: IDataLanguage[];
}

export interface ICategory {
	id?: number;
	name: string;
	code: string;
	lang: { locale: string; id: number | null } | null;
	isTranslation: boolean;
	isNew: boolean;
}

export interface ICategoryGroupParams {
	title: string;
	structuredData: string;
	language?: number;
	selectable: boolean;
	entity: string | null;
	relatedSite?: number | "global";
}

export interface IOrderCategoryParams {
	contentId: number;
	type: "category" | "group";
	parentGroup: number;
	position: number;
	structuredData: string;
	relatedSite: number | null;
	language: number;
}

export interface ILanguage {
	id: number;
	locale: string;
	label: string;
	language: string;
	path?: string;
	domain?: number | null;
	isDefault: boolean;
	home?: string;
}

export interface ISiteLanguage {
	language: number | null;
	path: string;
	domain: number | null;
	isDefault: boolean;
}

export interface IDataSource {
	id: string;
	title: string;
}

export interface IDataPackCategory {
	id: string;
	name: string;
}

export interface IDataPack {
	id: string;
	title: string;
	category: IDataPackCategory;
	description: string;
	image: string;
	templates: any[];
	modules: any[];
	categories: any[];
	activated: boolean;
	config: string;
	structuredData: IStructuredData[];
}

export interface ISocialState {
	[key: string]: string;
}

export interface INavigationForm {
	navigation: any;
}

export interface IUser {
	id: number | null;
	username: string;
	name: string;
	email: string;
	image?: IImage | null;
	company?: string;
	description?: string;
	dateCreated?: Date;
	failed: number;
	enabled?: boolean;
	timezone?: string;
	status?: string;
	roles: ISiteRoles[];
	isSuperAdmin: boolean;
	position?: string | null;
	profileCreated?: boolean;
}

export interface IEmptyStateProps {
	icon?: string;
	title?: string;
	message?: string | JSX.Element;
	button?: string;
	action?: () => void;
}

export interface ISiteRoles {
	siteId: number | string;
	roles: number[];
}

export interface ISelectOption {
	label: string;
	value: string;
}

export interface INavItem {
	title: string;
	path: string;
	component: any;
	permission?: string;
}

export interface ModuleCategoryInfo {
	label: string;
	value: string;
	featured?: boolean;
}

export interface IComponent {
	component: string;
	editorID: number;
	parentEditorID: number;
	fixed?: boolean;
	[key: string]: any;
}

export interface IErrorItem {
	type: string;
	message: string;
	validator: Record<string, unknown>;
	editorID: number | null;
	component: string | null;
	name: string;
	key: string;
	tab: string;
	template: boolean;
	hasDeactivatedPackage?: boolean;
	parentEditorID?: number;
}

export interface IStructuredDataFilter {
	label: string;
	value: string;
}

export interface IStructuredDataValue {
	name: string;
	title: string;
	type: string;
	value: string;
	dataPacks?: string[];
}

export interface IFilterValue {
	name: string | number;
	value: string;
	title: string;
	icon?: string;
}

export interface IStructuredDataSortedInitialState {
	isAscending: boolean;
	sortedByTitle: boolean;
	sortedByURL: boolean;
	sortedByDate: boolean;
}

export interface IStructuredDataQueryValues {
	types: IQueryValue[];
	translated: IQueryValue[];
	liveStatus: IQueryValue[];
	order: IQueryValue[];
	filterSites: IQueryValue[];
	categories: IQueryValue[];
	related: IQueryValue[];
}

export interface IQueryValue {
	value: string | number;
	label: string;
}

export interface IUsersQueryValues {
	order: IQueryValue[];
	filterSites: IQueryValue[];
	filterRoles: IQueryValue[];
}

export interface IRolesQueryValues {
	order: IQueryValue[];
}

export interface ISitesQueryValues {
	order: IQueryValue[];
	liveStatus: IQueryValue[];
}

export interface IDataPackConfigImportCategory {
	id: number;
	title: string;
	structuredData: string;
}
export interface IDataPackConfigImport {
	structuredData: string;
	categories: IDataPackConfigImportCategory[];
}

export interface IModal {
	isOpen: boolean;
	toggleModal: () => void;
	mainModalAction?: { title: string; onClick: () => void; disabled?: boolean };
	secondaryModalAction?: { title: string; onClick: () => void };
	isChild?: boolean;
}

export interface IUserEditing {
	id: number;
	name: string;
	username: string;
}

export interface IGetSiteImages {
	site: number | "global";
	page?: number;
	items: number;
	query?: string;
	search?: string;
	more?: boolean;
}

export interface IImageForm {
	id?: number;
	alt: string;
	title: string;
	description: string;
	tags: string[];
}

export interface IColumn {
	id: string;
	title: string;
	show: boolean;
	default: boolean;
}

export interface IGlobalLanguage {
	id: number;
	locale: string;
	language: string;
	label: string;
	isDefault: boolean;
}

export interface IContentType {
	clone: any;
	dataPacks: string[];
	defaultValues: any;
	editable: boolean;
	fromPage: boolean;
	id: string;
	local: false;
	schema: any;
	taxonomy: boolean;
	title: string;
	translate: boolean;
}

export interface IDomainRobot {
	id: number;
	path: string;
	fullUrl: string;
	content: string;
	computedContent: string;
}

export interface IRedirect {
	id?: number;
	from: string;
	to: { pageId?: number; url: string; linkTo?: number; href?: string };
	site?: { siteId: number | null; siteName: string | null; siteUrl: string | null };
	domain?: string;
	date?: string;
	item?: {
		from: string;
		to: string;
	};
}

export interface IAnalytics {
	scriptCode: string;
	siteScriptCodeExists: boolean;
	dimensions: IDimension[];
	groups: IDimensionsGroup[];
}

export interface IDimension {
	id?: number;
	name: string;
	values: string;
}

export interface IDimensionsGroup {
	id?: number;
	name: string;
	dimensions: string;
	templates?: string;
}

export interface ITemplate {
	dataPacks: string[];
	id: string;
	thumbnails: Record<string, string>;
	title: string;
	type: { label: string; value: string; mode: string };
}

export interface INotification {
	type: "error" | "info" | "success" | "warning";
	text: string;
	btnText?: string;
	onClick?: () => void;
}

export interface ILinkField {
	text: string;
	linkType: string;
	url?: IUrlField | null;
	modal: any;
}

export interface IRole {
	id: number;
	name: string;
	hex: string;
	description: string;
	permissions: IPermissions;
	active: boolean;
	users: any;
	editable?: boolean;
}

export interface IPermissions {
	totalPermissions: string;
	sitePermissions: { name: string; key: string }[];
	globalPermissions: { name: string; key: string }[];
}

export interface IGetRoles {
	siteId: number | string;
	order?: string;
}

export interface IActivateRole {
	id: number | number[];
	siteId: number | string;
	active: boolean;
}

export interface IIntegration {
	id?: number;
	name: string;
	description?: string;
	site?: number;
	contentHead: string;
	contentBody: string;
	contentBodyPosition: string | null;
	contentPresence: {
		presenceType: string | null;
		relatedPages: { id: number; title: string }[] | null;
	};
	active?: boolean;
	variables: undefined | IIntegrationVariable[];
	scriptOrder: number;
	correlativeScriptOrder?: number;
	type: "analytics" | "datalayer" | "addon";
	editable: boolean;
}

export interface IIntegrationVariable {
	defaultValue: string;
	value?: string;
	id?: number;
	isMultilanguage?: boolean;
	multilanguage: null | IVariableLang[];
	variableKey: string;
	variableName: string;
}

export interface IVariableLang {
	id?: number;
	languageId: number;
	value: string;
}

export interface ICreatePasswordParams {
	id: string;
	token: string;
	password: string;
	retypedPassword: string;
}

export interface INavPages {
	availableNavigationsInSite: { id: number; isDefault: boolean };
	items: {
		pagesInUse: { pageId: number; pageTitle: string; pathString: string; navigationId: number }[];
		totalItems: number;
	};
}

export interface IUpdateNavigationParam {
	navigations: { navigationId: number | null; type: "header" | "footer"; pageId: number }[];
}

export interface IActionMenuOption {
	label: string;
	action: () => void;
	icon: string;
	disabled?: boolean;
	helpText?: string | null;
	color?: boolean;
}

export interface IBulkAction {
	icon?: string;
	text: string;
	action: () => void;
}

export interface IContentFilter {
	label: string;
	value: string;
	description?: JSX.Element | string;
	items?: IDynamicFilter[];
}

export interface IDynamicFilter {
	label: string;
	value: string;
	fromPage?: boolean;
	firstTemplate?: string | null;
	editable?: boolean;
	isPrivate?: boolean;
}

export interface IGriddoTheme {
	label: string;
	value: string;
	default: boolean;
	elements?: IThemeElements;
}

export interface IThemeElements {
	include?: { datapacks?: string[]; templates?: string[]; modules?: string[] };
	exclude?: { datapacks?: string[]; templates?: string[]; modules?: string[] };
}

export interface ITemplateOption {
	dataPacks?: string[];
	value: string;
	name: string;
	title: string;
	type: string;
	mode?: string;
	editable?: boolean;
	isData?: boolean;
}

export interface IExportDataParams {
	ids?: number[];
	format: string[];
}

export interface IContainerEvaluation {
	isEmpty: boolean;
	containedComponent: IContainedComponent;
}

export interface IContainedComponent {
	containerText: string;
	component: string;
	componentID: number;
}

export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;

export interface HeadingNode {
	level: HeadingLevel;
	tag: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
	text: string;
	isHidden: boolean;
	children: HeadingNode[];
}

export type HeadingFilter = "all" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6";

export type Field =
	| "AsyncCheckGroup"
	| "AsyncSelect"
	| "CheckField"
	| "CheckGroup"
	| "ComponentArray"
	| "ComponentContainer"
	| "ConditionalField"
	| "DateField"
	| "FieldGroup"
	| "HeadingField"
	| "HiddenField"
	| "ImageField"
	| "LinkField"
	| "NumberField"
	| "RadioField"
	| "RadioGroup"
	| "ReferenceField"
	| "RichText"
	| "Select"
	| "TextArea"
	| "TextField"
	| "UniqueCheck"
	| "UrlField"
	| "VisualOption"
	| "VisualUniqueSelection"
	| "Wysiwyg";

export type {
	GetFormsParams,
	ListForm,
	FormContent,
	FormCategory,
	FormCategoriesList,
	PostFormCategoryParams,
	PutFormCategoryParams,
	FormCategoriesOrderParams,
	FormState,
	FormLanguage,
};
export type {
	IFilesFolder,
	IFile,
	IFileUsePages,
	IFileUseItem,
	IFolder,
	IFolderTree,
	IGetFolderParams,
	IImage,
	IImageFolder,
};
export type { ILogItemsByDay, ILogItemsByUser, ILogContent };
