import { PureContainer } from '@worktif/utils';
import type { TiesInstance } from '../../../lib/runtime-web/types';
/**
 * Ties registration helper for PureContainer integration.
 *
 * Processes Ties classes and registers their services with a PureContainer instance.
 * Each Ties class must implement a register(container: PureContainer<string>) method
 * that uses container.tie(), container.tieConst(), or container.tieSingleton() to
 * register services.
 *
 * @example
 * ```typescript
 * const registrar = new TiesRegistrar();
 * const container = new PureContainer<string>({ defaultScope: 'Singleton' });
 *
 * registrar.registerTies(container, [PaymentsTies, BillingTies]);
 *
 * // Now container has all services registered by the Ties classes
 * const paymentsService = container.run('PaymentsService');
 * ```
 */
export declare class TiesRegistrar {
    /**
     * Register all Ties classes with the provided container.
     *
     * Calls the register(container) method on each Ties class instance.
     * The Ties classes are responsible for calling container.tie(),
     * container.tieConst(), or container.tieSingleton() to register their services.
     *
     * @param container - PureContainer instance to register services with
     * @param tiesClasses - Array of Ties class constructors
     * @throws TiesRegistrationError if a Ties class doesn't implement register()
     *
     * @example
     * ```typescript
     * // Ties class example
     * class PaymentsTies {
     *   register(container: PureContainer<string>): void {
     *     container.tieSingleton({
     *       PaymentsService: {
     *         instance: PaymentsService,
     *         args: []
     *       }
     *     });
     *   }
     * }
     *
     * registrar.registerTies(container, [PaymentsTies]);
     * ```
     */
    registerTies(container: PureContainer<string>, tiesClasses: TiesInstance[]): void;
    /**
     * Validate that all required services are registered in the container.
     *
     * Attempts to resolve each service name to ensure it's properly registered.
     * This is useful for catching missing service registrations early.
     *
     * @param container - PureContainer to validate
     * @param requiredServices - Array of service names that must be registered
     * @throws Error if any required service is not registered
     *
     * @example
     * ```typescript
     * registrar.validateContainer(container, ['PaymentsService', 'BillingService']);
     * ```
     */
    validateContainer(container: PureContainer<string>, requiredServices: string[]): void;
    /**
     * Extract service names from Ties classes for validation.
     *
     * This is a helper method that can be used to automatically determine
     * which services should be registered by a set of Ties classes.
     * Note: This requires the Ties classes to expose their service names,
     * which is optional but recommended for better error reporting.
     *
     * @param tiesClasses - Array of Ties class constructors
     * @returns Array of service names that should be registered
     *
     * @example
     * ```typescript
     * const expectedServices = registrar.extractServiceNames([PaymentsTies]);
     * registrar.validateContainer(container, expectedServices);
     * ```
     */
    extractServiceNames(tiesClasses: TiesInstance[]): string[];
}
