import type { TryOnResponse, TryOnStatus, FitAreaInfo } from "./types";
export interface TryOnContext {
    /** Storefront product the customer is currently viewing — shown in analytics. */
    productId?: string;
    productTitle?: string;
    productCategory?: string;
    productSubcategory?: string;
    productFitType?: string;
    productType?: string;
    productTags?: string[];
    /** Free-text product description forwarded to the try-on prompt so Gemini
     *  knows the garment context (e.g. "Brown slip maxi dress, spaghetti straps"). */
    productDescription?: string;
    /** Material / fabric composition (e.g. "100% Cotton", "60% Polyester / 40% Polyester")
     *  — forwarded to the prompt so Gemini drapes the fabric correctly without
     *  having to guess from the image alone. */
    productMaterial?: string;
    /** Optional clean product/detail image. The backend sends it to Gemini as an
     *  additional design reference while `garmentImage` remains the worn/model
     *  styling reference. */
    garmentDetailImage?: string;
    /** Optional silhouette-prompt context forwarded to the backend Gemini try-on
     *  call. Enables doc-example-grade fit reasoning ("X tension at button
     *  because waist 54.4 exceeds size 50 drop"). All fields optional. */
    silhouetteContext?: {
        recommendedSize?: string;
        recommendedSizeMeasurements?: string;
        /** @deprecated Full size guides are no longer forwarded to try-on prompts. */
        sizeChartSummary?: string;
        userMeasurementsText?: string;
        userHeight?: string;
        userWeight?: string;
    };
    /** True when `modelImage` is a previous try-on result rather than the
     *  user's raw photo. Switches the backend to an edit-mode prompt that
     *  preserves accessories (socks, ties, pocket squares, cufflinks, shoes)
     *  the prior call already painted, instead of re-deriving them. */
    editFromPrevious?: boolean;
    /** Backend-cached photo id from a previous /tryon response. When provided
     *  the SDK may pass an empty `modelImage` (or omit it) and the backend
     *  will use the cached photo. Saves uploading 700–900 KB on every regen
     *  AND guarantees byte-identical photo across regens (no JPEG-recompression
     *  drift). On cache miss the SDK should fall back to sending the full image. */
    modelImageId?: string;
}
export type TryOnCategory = "apparel" | "shoe" | "bag" | "hat" | "sunglasses" | "earring" | "necklace" | "bracelet" | "ring" | "belt" | "watch" | "accessory";
export interface TryOnFeedbackInput {
    jobId?: string;
    historyEntryId?: string;
    rating?: number;
    note?: string;
    productId?: string;
    productTitle?: string;
    productUrl?: string;
    recommendedSize?: string;
    profileLoggedIn?: boolean;
    profileId?: string;
    profileName?: string;
    profileAccessToken?: string;
}
export declare class ApiClient {
    private apiKey?;
    private baseUrl;
    constructor(apiKey?: string, apiUrl?: string);
    private get headers();
    submitTryOn(modelImage: string, garmentImage: string, fitInfo?: FitAreaInfo[], category?: TryOnCategory, context?: TryOnContext): Promise<TryOnResponse>;
    getStatus(jobId: string): Promise<TryOnStatus>;
    submitTryOnFeedback(input: TryOnFeedbackInput): Promise<{
        ok: true;
    }>;
    getStreamUrl(): string;
}
export declare function jsonHeaders(apiKey?: string): Record<string, string>;
export declare class PrimeStyleError extends Error {
    code: string;
    constructor(message: string, code: string);
}
