import { KosContextLogger } from '../kosModel';

export interface KosLoggerAwareOptions {
    /** Logger property name. Default: 'logger' */
    loggerProperty?: string;
    /** Logger context/group name. If not provided, uses model type */
    loggerContext?: string;
}
/**
 * Interface for models using @kosLoggerAware decorator.
 * Use TypeScript interface merging to add the logger property to your model class.
 *
 * @example
 * ```typescript
 * interface MyModelImpl extends KosLoggerAware {}
 *
 * @kosModel("my-model")
 * @kosLoggerAware()
 * export class MyModelImpl implements IKosDataModel {
 *   id: string;
 *
 *   constructor(modelId: string, options: any, context: KosCreationContext) {
 *     this.id = modelId;
 *     // No logger setup needed - automatically injected!
 *   }
 *
 *   async performOperation() {
 *     this.logger.info("Starting operation"); // Direct access to logger
 *   }
 * }
 * ```
 */
export interface KosLoggerAware {
    /**
     * KOS context logger for this model instance.
     * Automatically injected by the @kosLoggerAware decorator.
     * Shared across all instances of the same model type for optimal performance.
     * Provides structured logging with debug(), info(), warn(), and error() methods.
     * Logger context is automatically set to the model type name unless overridden.
     */
    logger: KosContextLogger;
}
/**
 * Class decorator that automatically injects a shared logger into a KOS model.
 *
 * This decorator eliminates the need for manual logger setup in constructors by:
 * - Creating a single shared logger per model type (not per instance)
 * - Using the KosLoggerFactory for consistent logger creation
 * - Following KOS naming conventions for logger context
 * - Providing optimal performance through logger reuse
 *
 * **Performance Note**: Creates one logger per model type, shared across all instances
 * of that type. This is much more efficient than per-instance logger creation.
 *
 * **Important**: Use TypeScript interface merging to get proper type information:
 *
 * ```typescript
 * interface MyModelImpl extends KosLoggerAware {}
 *
 * @kosModel("my-model")
 * @kosLoggerAware()
 * export class MyModelImpl implements IKosDataModel {
 *   // logger property is now available with full type safety
 *   async doSomething() {
 *     this.logger.debug("Doing something...");
 *   }
 * }
 * ```
 *
 * @param options Configuration options for the logger injection
 * @returns A class decorator
 *
 * @example
 * ```typescript
 * // Basic usage with default logger property
 * @kosLoggerAware()
 * class MyModel { }
 *
 * // Custom logger property name
 * @kosLoggerAware({ loggerProperty: 'log' })
 * class MyModel {
 *   // this.log is available instead of this.logger
 * }
 *
 * // Custom logger context for specialized logging
 * @kosLoggerAware({ loggerContext: 'analytics' })
 * class AnalyticsModel {
 *   // Logger uses "analytics" context instead of model type
 * }
 * ```
 *
 * @category KOS Model Decorator
 * @since 2.1.0
 */
export declare function kosLoggerAware(options?: KosLoggerAwareOptions): ClassDecorator;
//# sourceMappingURL=kos-logger-aware.d.ts.map