import type { AvatarInteractionState } from '../types/AvatarVisualDefinition';
/**
 * One 2D point used by the shared organic octopus geometry helpers.
 *
 * @private helper of octopus avatar visuals
 */
type Point = {
    readonly x: number;
    readonly y: number;
};
/**
 * Shape parameters for the smooth octopus silhouette generator.
 *
 * @private helper of octopus avatar visuals
 */
type CreateOrganicOctopusBodyPointsOptions = {
    readonly centerX: number;
    readonly centerY: number;
    readonly bodyRadius: number;
    readonly horizontalStretch: number;
    readonly verticalStretch: number;
    readonly mantleLift: number;
    readonly lowerDrop: number;
    readonly tentacleDepth: number;
    readonly wobbleAmplitude: number;
    readonly lobeCount: number;
    readonly shapePhase: number;
    readonly timeMs: number;
    readonly pointCount?: number;
};
/**
 * One deterministic ribbon tentacle attached to an organic octopus mantle.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
export type OrganicTentacleShape = {
    readonly startPoint: Point;
    readonly controlPointOne: Point;
    readonly controlPointTwo: Point;
    readonly endPoint: Point;
    readonly baseWidth: number;
    readonly tipWidth: number;
    readonly colorBias: number;
    readonly highlightBias: number;
    readonly sampleCount: number;
};
/**
 * Options for generating deterministic organic octopus tentacles.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
type CreateOrganicOctopusTentacleShapesOptions = {
    readonly size: number;
    readonly centerX: number;
    readonly centerY: number;
    readonly bodyRadius: number;
    readonly horizontalStretch: number;
    readonly tentacleCount: number;
    readonly shapePhase: number;
    readonly createRandom: (salt: string) => () => number;
    readonly timeMs: number;
    readonly saltPrefix: string;
    readonly bodyPoints?: ReadonlyArray<Point>;
    readonly variation?: OrganicTentacleVariationOptions;
};
/**
 * Opt-in shape multipliers that let one visual broaden or tighten the shared tentacle generator.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
type OrganicTentacleVariationOptions = {
    readonly flowLengthScale?: number;
    readonly lateralReachScale?: number;
    readonly tipReachScale?: number;
    readonly baseWidthScale?: number;
    readonly tipWidthScale?: number;
    readonly rootSpreadScale?: number;
    readonly startYOffsetScale?: number;
    readonly swayScale?: number;
};
/**
 * One sampled ribbon point on an organic octopus tentacle.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
export type OrganicTentacleRibbonPoint = {
    readonly x: number;
    readonly y: number;
    readonly normalX: number;
    readonly normalY: number;
    readonly width: number;
    readonly progress: number;
};
/**
 * One resolved eye-motion sample shared by the octopus-family renderers.
 *
 * @private shared geometry helper of octopus avatar visuals
 */
export type OrganicEyeMotion = {
    readonly pupilOffsetX: number;
    readonly pupilOffsetY: number;
};
/**
 * Minimal interaction subset needed to steer octopus-eye pupils.
 *
 * @private shared geometry helper of octopus avatar visuals
 */
type OrganicEyeInteraction = Pick<AvatarInteractionState, 'gazeX' | 'gazeY' | 'intensity'>;
/**
 * Builds a smoothly morphing octopus-like silhouette from deterministic parameters.
 *
 * @param options Shape construction options.
 * @returns Closed-loop body points.
 *
 * @private shared geometry helper of `octopus2AvatarVisual` and `octopus3AvatarVisual`
 */
export declare function createOrganicOctopusBodyPoints(options: CreateOrganicOctopusBodyPointsOptions): Array<Point>;
/**
 * Traces a smooth closed path through the provided points.
 *
 * @param context Canvas 2D context.
 * @param points Closed-loop points.
 *
 * @private shared geometry helper of `octopus2AvatarVisual` and `octopus3AvatarVisual`
 */
export declare function traceSmoothClosedPath(context: CanvasRenderingContext2D, points: ReadonlyArray<Point>): void;
/**
 * Creates deterministic ribbon tentacles for the organic octopus visuals.
 *
 * @param options Tentacle construction options.
 * @returns Tentacle descriptors.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
export declare function createOrganicOctopusTentacleShapes(options: CreateOrganicOctopusTentacleShapesOptions): Array<OrganicTentacleShape>;
/**
 * Samples the cubic tentacle centerline and offsets normals to build a filled ribbon.
 *
 * @param tentacleShape Deterministic tentacle descriptor.
 * @returns Sampled ribbon points.
 *
 * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
 */
export declare function sampleOrganicTentacleRibbonPoints(tentacleShape: OrganicTentacleShape): Array<OrganicTentacleRibbonPoint>;
/**
 * Resolves smooth pupil offsets that blend autonomous idle drift with live viewer tracking.
 *
 * @param options Eye motion options.
 * @returns Resolved pupil offsets.
 *
 * @private shared geometry helper of octopus avatar visuals
 */
export declare function resolveOrganicEyeMotion(options: {
    readonly radiusX: number;
    readonly radiusY: number;
    readonly timeMs: number;
    readonly phase: number;
    readonly interaction: OrganicEyeInteraction;
    readonly autonomousDriftRatioX?: number;
    readonly autonomousDriftRatioY?: number;
}): OrganicEyeMotion;
/**
 * Samples one point on a cubic Bezier curve.
 *
 * @param startPoint Curve start point.
 * @param controlPointOne First control point.
 * @param controlPointTwo Second control point.
 * @param endPoint Curve end point.
 * @param progress Sampling progress in the range `[0, 1]`.
 * @returns Sampled point.
 *
 * @private shared geometry helper of `octopus3AvatarVisual`
 */
export declare function getCubicBezierPoint(startPoint: Point, controlPointOne: Point, controlPointTwo: Point, endPoint: Point, progress: number): Point;
export {};
