// Copyright 2025 SkyReels SDK Contributors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//! # SkyReels SDK
//!
//! Rust SDK for SkyReels AI Video Generation API.
//!
//! ## Features
//!
//! - Text-to-video generation
//! - Image-to-video generation
//! - Omni video generation with multiple reference types
//! - Async/await support with tokio
//! - Comprehensive error handling
//! - Type-safe API interfaces
//!
//! ## Quick Start
//!
//! ```rust,no_run
//! use skyreels::{AspectRatio, Mode, SkyReelsClient};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     let client = SkyReelsClient::new("your_api_key");
//!
//!     // Text-to-video example
//!     let request = client.text2video()
//!         .submit_request("A serene forest scene at sunset")
//!         .aspect_ratio(AspectRatio::Wide16x9)
//!         .duration(5)
//!         .sound(true)
//!         .mode(Mode::Std)
//!         .build();
//!
//!     let task_id = client.text2video().submit(request).await?;
//!     println!("Task submitted: {}", task_id);
//!
//!     // Image-to-video example
//!     let img_request = client.image2video()
//!         .submit_request("Camera pans across the landscape", "https://example.com/image.jpg")
//!         .duration(5)
//!         .sound(true)
//!         .mode(Mode::Std)
//!         .build();
//!
//!     let img_task_id = client.image2video().submit(img_request).await?;
//!     println!("Image task submitted: {}", img_task_id);
//!
//!     // Query task status
//!     let status = client.text2video()
//!         .get_task(&task_id)
//!         .await?;
//!
//!     println!("Task status: {}", status.get_status());
//!
//!     Ok(())
//! }
//! ```

pub mod client;
pub mod error;
pub mod text2video;
pub mod image2video;
pub mod omni;

// Re-exports for convenience
pub use client::SkyReelsClient;
pub use error::{Error, Result};
pub use text2video::{AspectRatio, Mode, TaskStatus, Text2Video};
pub use image2video::Image2Video;
pub use omni::{Omni, ReferenceImage, ReferenceImageType, ReferenceVideo, ReferenceVideoType};

/// SDK version
pub const VERSION: &str = env!("CARGO_PKG_VERSION");

/// Default API base URL
pub const DEFAULT_BASE_URL: &str = "https://api-gateway.skyreels.ai/api/v1";
