use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc};

/// File upload request
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileUploadRequest {
    pub filename: String,
    pub mime_type: String,
    pub size: u64,
    pub content: Vec<u8>,
    pub metadata: Option<serde_json::Value>,
}

/// File upload response
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileUploadResponse {
    pub file_id: Uuid,
    pub url: String,
    pub thumbnail_url: Option<String>,
    pub metadata: FileMetadata,
}

/// File metadata
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileMetadata {
    pub id: Uuid,
    pub filename: String,
    pub mime_type: String,
    pub size: u64,
    pub hash: String,
    pub url: String,
    pub thumbnail_url: Option<String>,
    pub uploaded_by: Uuid,
    pub created_at: DateTime<Utc>,
}
