import { Command } from '@oclif/core';
import { OAuthCommand } from './oauth-command.js';
import type { ResolvedB2CConfig } from '../config/index.js';
import { type OdsClient } from '../clients/ods.js';
/**
 * Base command for ODS (On-Demand Sandbox) operations.
 * Use this for commands that interact with the Developer Sandbox API
 * (sandbox creation, deletion, start/stop, realm info, etc.)
 *
 * Environment variables:
 * - SFCC_SANDBOX_API_HOST: ODS API hostname
 * - Plus all from OAuthCommand (SFCC_CLIENT_ID, SFCC_CLIENT_SECRET)
 *
 * Provides:
 * - Host configuration flag with env var support
 * - Typed ODS API client via `this.odsClient`
 *
 * @example
 * export default class MySandboxCommand extends OdsCommand<typeof MySandboxCommand> {
 *   async run(): Promise<void> {
 *     const { data } = await this.odsClient.GET('/me', {});
 *     console.log('User:', data?.data?.user?.name);
 *   }
 * }
 */
export declare abstract class OdsCommand<T extends typeof Command> extends OAuthCommand<T> {
    protected getDefaultClientId(): string;
    static baseFlags: {
        'sandbox-api-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'auth-scope': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'tenant-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'user-auth': import("@oclif/core/interfaces").BooleanFlag<boolean>;
        'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
        debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
        json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
        jsonl: import("@oclif/core/interfaces").BooleanFlag<boolean>;
        lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'project-directory': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
        'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
        'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
    };
    protected loadConfiguration(): ResolvedB2CConfig;
    private _odsClient?;
    /**
     * Gets the ODS API client for this command.
     *
     * The client is lazily created using the configured host and OAuth credentials.
     * It provides typed methods for all ODS API operations.
     *
     * @example
     * // Get user info
     * const { data } = await this.odsClient.GET('/me', {});
     *
     * // List sandboxes
     * const { data } = await this.odsClient.GET('/sandboxes', {});
     *
     * // Create a sandbox operation
     * const { data } = await this.odsClient.POST('/sandboxes/{sandboxId}/operations', {
     *   params: { path: { sandboxId: 'uuid' } },
     *   body: { operation: 'start' }
     * });
     */
    protected get odsClient(): OdsClient;
    /**
     * Gets the configured ODS API host.
     */
    protected get odsHost(): string;
    /**
     * Resolves a sandbox identifier to a UUID.
     *
     * Supports both UUID format and friendly format (realm-instance, e.g., "abcd-123" or "abcd_123").
     * If given a UUID, returns it directly. If given a friendly format, queries the API to find
     * the matching sandbox and logs the resolution.
     *
     * @param identifier - Sandbox identifier (UUID or friendly format)
     * @returns The sandbox UUID
     * @throws Error if the sandbox cannot be found (friendly ID not resolved)
     *
     * @example
     * ```typescript
     * // In a command's run() method:
     * const sandboxId = await this.resolveSandboxId(this.args.sandboxId);
     * ```
     */
    protected resolveSandboxId(identifier: string): Promise<string>;
}
