import { type Composition, type Scene } from "../../composition.js";
export interface AddScenePayload {
    title: string;
    intent?: Scene["intent"];
    prompt?: string;
    narration?: string;
    durationSec?: number;
    shotSize?: Scene["shotSize"];
    cameraMovement?: Scene["cameraMovement"];
    mdAnchor?: string;
    memberClipIds?: string[];
    memberAssetIds?: string[];
}
/**
 * Append a new scene (分镜 / storyboard shot) to `comp`. Mints a fresh `scn_`
 * id, auto-assigns `order = max(existing order) + 1` (0 when there are no
 * scenes yet), and seeds the generation-handoff state (`status: "planned"`,
 * `generatedAssetIds: []`). Callers MUST NOT pass `order` — it is owned here.
 *
 * `comp.scenes` is optional on the schema; if absent it is lazily seeded with
 * an empty array (in place) before the push, so the array identity is stable
 * from this point on.
 *
 * Returns the minted `sceneId` so callers (UI, CLI, tests) can immediately
 * reference the new shot.
 */
export declare function addScene(comp: Composition, p: AddScenePayload): {
    sceneId: string;
};
export interface SetScenePropsPatch {
    title?: string;
    intent?: Scene["intent"] | null;
    prompt?: string | null;
    narration?: string | null;
    durationSec?: number | null;
    shotSize?: Scene["shotSize"] | null;
    cameraMovement?: Scene["cameraMovement"] | null;
    mdAnchor?: string | null;
    memberClipIds?: string[];
    memberAssetIds?: string[];
}
/**
 * Patch editable fields on the scene `sceneId` in place. `id` / `order` cannot
 * be changed through here (order is reorderScenes' job). Only keys actually
 * present in `props` are written, so a partial patch leaves siblings untouched.
 *
 * Throws `CompositionOpError{code:4}` when no scene matches `sceneId`.
 */
export declare function setSceneProps(comp: Composition, p: {
    sceneId: string;
    props: SetScenePropsPatch;
}): void;
/**
 * Reorder scenes to the exact sequence `orderedSceneIds`, then recompact so the
 * resulting `order` is contiguous 0..N-1. `orderedSceneIds` must be a complete
 * permutation of the existing scene ids (same set, same size) — otherwise we
 * throw rather than silently drop / duplicate a scene.
 *
 * The scene objects themselves stay in their original array slots (we only
 * rewrite their `order` field); the array identity is preserved (decision #1).
 *
 * Throws `CompositionOpError{code:4}` on an id-set mismatch.
 */
export declare function reorderScenes(comp: Composition, p: {
    orderedSceneIds: string[];
}): void;
/**
 * Link generated assets onto the scene `sceneId` (the generation-handoff
 * write-back). Appends `assetIds` to `generatedAssetIds` (deduped, preserving
 * existing order), sets `selectedAssetId` to `p.selectedAssetId` (or the last
 * of `assetIds` by default), and flips `status` to `p.status` (default
 * `"generated"`).
 *
 * Throws `CompositionOpError{code:4}` when no scene matches `sceneId`.
 */
export declare function linkSceneAssets(comp: Composition, p: {
    sceneId: string;
    assetIds: string[];
    selectedAssetId?: string;
    status?: "planned" | "generated" | "stale";
}): void;
/**
 * Remove the scene `sceneId` from `comp` and recompact order to contiguous
 * 0..N-1. We `splice` the EXISTING `comp.scenes` array so it keeps its identity
 * (decision #1).
 *
 * Throws `CompositionOpError{code:4}` when no scene matches `sceneId`.
 */
export declare function removeScene(comp: Composition, p: {
    sceneId: string;
}): void;
//# sourceMappingURL=scene.d.ts.map