use uuid::Uuid;

use crate::application::dtos::trash_dto::TrashedItemDto;
use crate::common::errors::Result;

/// Port for trash-related use cases
pub trait TrashUseCase: Send + Sync {
    /// List items in the user's trash
    async fn get_trash_items(&self, user_id: Uuid) -> Result<Vec<TrashedItemDto>>;

    /// Move a file or folder to trash
    async fn move_to_trash(&self, item_id: &str, item_type: &str, user_id: Uuid) -> Result<()>;

    /// Restore an item from trash to its original location
    async fn restore_item(&self, trash_id: &str, user_id: Uuid) -> Result<()>;

    /// Permanently delete an item from trash
    async fn delete_permanently(&self, trash_id: &str, user_id: Uuid) -> Result<()>;

    /// Empty the trash for a specific user
    async fn empty_trash(&self, user_id: Uuid) -> Result<()>;
}
