/**
 * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
 */
/**
 * @module collaboration-core/config
 * @publicApi
 */
import type { LocaleTranslate } from '@ckeditor/ckeditor5-utils';
/**
 * The locale configuration.
 *
 * ```ts
 * ClassicEditor
 * 	.create( {
 * 		locale: {
 * 			// The localization configuration.
 * 		}
 * 	} )
 * 	.then( ... )
 * 	.catch( ... );
 * ```
 *
 * See {@link module:core/editor/editorconfig~EditorConfig all editor configuration options}.
 */
export interface LocaleConfig {
    /**
     * A function that formats date to the custom format. It is used in dates in annotations (balloons) displaying
     * comments and suggestions details.
     *
     * The default formatting can be changed by setting a custom formatting function to `config.locale.dateTimeFormat`.
     *
     * ```ts
     * import { DateTime } from 'luxon';
     *
     * ClassicEditor
     * 	.create( {
     * 		attachTo: document.querySelector( '#editor' ),
     * 		toolbar: {
     * 			items: [ 'bold', 'italic', '|', 'comment' ]
     * 		},
     * 		sidebar: {
     * 			container: document.querySelector( '#sidebar' )
     * 		},
     * 		locale: {
     * 			dateTimeFormat: date => DateTime.fromJSDate( date ).toFormat( 'dd/LL/yyyy' )
     * 		}
     * 	} )
     * 	.catch( error => console.error( error ) );
     * ```
     *
     * @returns The generated date.
     */
    dateTimeFormat?: (date: Date, t?: LocaleTranslate) => string;
}
/**
 * The configuration of the Users features.
 *
 * ```ts
 * ClassicEditor
 * 	.create( {
 * 		users: ... // Users configuration.
 * 	} )
 * 	.then( ... )
 * 	.catch( ... );
 * ```
 *
 * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.
 */
export interface CollaborationUsersConfig {
    /**
     * User ID value that will be used for the anonymous user.
     */
    anonymousUserId?: string;
    /**
     * Number of defined colors that are randomly assigned to users.
     */
    colorsCount?: number;
    /**
     * A callback function that customizes the way user initials are generated.
     *
     * If provided, this function will be called with the user's full name as the argument, and
     * it should return a string representing the user's initials.
     *
     * Example usage:
     * ```ts
     * ClassicEditor
     * 	.create( {
     * 		users: {
     * 			getInitialsCallback: ( name: string ) => {
     *     			// Custom logic to generate initials.
     *     			return name.split( ' ' )[ 0 ].charAt( 0 ) + name.split( ' ' )[ 1 ].charAt( 0 );
     * 			}
     * 		}
     * 	} )
     * 	.then( ... )
     * 	.catch( ... );
     * ```
     */
    getInitialsCallback?: (name: string) => string;
}
/**
 * The configuration of the real-time collaboration features.
 *
 * ```ts
 * ClassicEditor
 * 	.create( {
 * 		collaboration: ... // Collaboration features configuration.
 * 	} )
 * 	.then( ... )
 * 	.catch( ... );
 * ```
 *
 * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.
 */
export interface RealTimeCollaborationConfig {
    /**
     * The channel ID is a unique ID that identifies the data loaded in the editor instance or used by
     * the context instance.
     *
     * If specified for the editor, it is the document ID.
     *
     * If you are using multiple editors instances at the same time, each of them should use a different
     * channel ID to connect to a specific document.
     *
     * If specified for context, it is the ID for all the data related to context instance.
     * This ID will be used for data that is not related to an editor instance, for example comments
     * outside the editor.
     *
     * In the case of context, the ID can be an ID of a subpage or a form, or a different entity accordingly
     * to your application.
     *
     * The channel ID can be used to recognize entity to which piece of data belongs in integrations that use `Context`
     * and context plugins. For example, if you are preparing a custom integration using the comments API,
     * you can use the channel ID to recognize whether the comment was added to an editor instance
     * (and which one) or to the context.
     *
     * ```ts
     * ClassicEditor
     * 	.create( {
     * 		collaboration: {
     * 			channelId: 'your-channel-id'
     * 		}
     * 	} )
     * 	.then( ... )
     * 	.catch( ... );
     * ```
     */
    channelId?: string;
}
