import mongoose, { Schema, Document } from 'mongoose'; export interface IVideoAsset { type: 'clip' | 'image' | 'logo'; path: string; } export interface IVideoVoice { type: string; language: string; tone: string; speed: number; } export interface IExportUrl { format: string; quality: string; url: string; } export interface IVideo extends Document { projectId: mongoose.Types.ObjectId; script: string; voice: IVideoVoice; music: { filePath: string; }; stylePreset: mongoose.Types.ObjectId; assets: IVideoAsset[]; status: 'pending' | 'generating' | 'preview' | 'exported' | 'failed'; previewUrl: string; exportUrls: IExportUrl[]; cliLog: string[]; createdAt: Date; } const VideoSchema = new Schema({ projectId: { type: Schema.Types.ObjectId, ref: 'Project', required: true, }, script: { type: String, required: true, }, voice: { type: { type: String, default: 'neutral', }, language: { type: String, default: 'en', }, tone: { type: String, default: 'professional', }, speed: { type: Number, default: 1.0, }, }, music: { filePath: { type: String, default: '', }, }, stylePreset: { type: Schema.Types.ObjectId, ref: 'Preset', }, assets: [{ type: { type: String, enum: ['clip', 'image', 'logo'], }, path: String, }], status: { type: String, enum: ['pending', 'generating', 'preview', 'exported', 'failed'], default: 'pending', }, previewUrl: { type: String, default: '', }, exportUrls: [{ format: String, quality: String, url: String, }], cliLog: [{ type: String, }], createdAt: { type: Date, default: Date.now, }, }); export const Video = mongoose.model('Video', VideoSchema);