use crate::AiConfig;
use serde::{Deserialize, Serialize};
use wae_types::{BillingDimensions, WaeResult};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AiVideoInput {
Text(String),
Image(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiVideoTask {
pub inputs: Vec<AiVideoInput>,
pub duration: Option<u32>,
pub width: Option<u32>,
pub height: Option<u32>,
pub fps: Option<u32>,
pub extra: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiVideoOutput {
pub video_url: String,
pub cover_url: Option<String>,
pub usage: BillingDimensions,
}
pub trait VideoGenerationCapability: Send + Sync {
#[allow(async_fn_in_trait)]
async fn generate_video(&self, task: &AiVideoTask, config: &AiConfig) -> WaeResult<AiVideoOutput>;
#[allow(async_fn_in_trait)]
async fn get_video_task_status(&self, task_id: &str, config: &AiConfig) -> WaeResult<AiVideoOutput>;
}