import type { GeneratedFile } from '../generate-text';
import type { VideoModelProviderMetadata } from '../types/video-model';
import type { VideoModelResponseMetadata } from '../types/video-model-response-metadata';
import type { Warning } from '../types/warning';

/**
 * The result of an `experimental_generateVideo` call.
 * Contains the generated video and additional information.
 */
export interface GenerateVideoResult {
  /**
   * The first video available to the SDK.
   *
   * @throws {NoVideoGeneratedError} When all videos were delivered directly
   * to caller-managed storage. Use `uploadedVideos` to handle upload-only results.
   */
  readonly video: GeneratedFile;

  /**
   * All videos available to the SDK, excluding videos uploaded by the provider.
   */
  readonly videos: Array<GeneratedFile>;

  /**
   * Number of videos delivered directly to caller-managed storage.
   * These videos are not downloaded and are not included in `videos`.
   */
  readonly uploadedVideos: number;

  /**
   * Warnings for the call, e.g. unsupported settings.
   */
  readonly warnings: Array<Warning>;

  /**
   * Response metadata from the provider.
   * May contain multiple responses if multiple calls were made.
   */
  readonly responses: Array<VideoModelResponseMetadata>;

  /**
   * Provider-specific metadata passed through from the provider.
   */
  readonly providerMetadata: VideoModelProviderMetadata;
}
