// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.

import type { ApiItem } from '../items/ApiItem.js';

/**
 * Generic result object for finding API items used by different kinds of find operations.
 *
 * @public
 */
export interface IFindApiItemsResult {
	/**
	 * The API items that were found. Not guaranteed to be complete, see `maybeIncompleteResult`.
	 */
	items: ApiItem[];

	/**
	 * Indicates whether the result is potentially incomplete due to errors during the find operation.
	 * If true, the `messages` explain the errors in more detail.
	 */
	maybeIncompleteResult: boolean;

	/**
	 * Diagnostic messages regarding the find operation.
	 */
	messages: IFindApiItemsMessage[];
}

/**
 * This object is used for messages returned as part of `IFindApiItemsResult`.
 *
 * @public
 */
export interface IFindApiItemsMessage {
	/**
	 * Unique identifier for the message.
	 *
	 * @beta
	 */
	messageId: FindApiItemsMessageId;

	/**
	 * Text description of the message.
	 */
	text: string;
}

/**
 * Unique identifiers for messages returned as part of `IFindApiItemsResult`.
 *
 * @public
 */
export enum FindApiItemsMessageId {
	/**
	 * "Unable to resolve declaration reference within API item ___: ___"
	 */
	DeclarationResolutionFailed = 'declaration-resolution-failed',

	/**
	 * "Unable to analyze extends clause ___ of API item ___ because no canonical reference was found."
	 */
	ExtendsClauseMissingReference = 'extends-clause-missing-reference',

	/**
	 * "Unable to analyze references of API item ___ because it is not associated with an ApiModel"
	 */
	NoAssociatedApiModel = 'no-associated-api-model',

	/**
	 * "Unable to analyze references of API item ___ because it is of unsupported kind ___"
	 */
	UnsupportedKind = 'unsupported-kind',
}
