use crate::http::api::SpotifyApi;
use crate::http::client::HttpError;
use crate::http::endpoints::Endpoint;
use serde_json::Value;
pub async fn remove_items_from_playlist(
client: &SpotifyApi,
playlist_id: &str,
uris: &[String],
) -> Result<Option<Value>, HttpError> {
let tracks: Vec<serde_json::Value> = uris
.iter()
.map(|uri| serde_json::json!({ "uri": uri }))
.collect();
let body = serde_json::json!({
"tracks": tracks
});
client
.delete_json(&Endpoint::PlaylistTracks { id: playlist_id }.path(), &body)
.await
}
pub async fn remove_items_at_positions(
client: &SpotifyApi,
playlist_id: &str,
items: &[(String, usize)],
) -> Result<Option<Value>, HttpError> {
let mut sorted_items: Vec<(String, usize)> = items.to_vec();
sorted_items.sort_by(|a, b| b.1.cmp(&a.1));
let tracks: Vec<serde_json::Value> = sorted_items
.iter()
.map(|(uri, pos)| serde_json::json!({ "uri": uri, "positions": [*pos] }))
.collect();
let body = serde_json::json!({
"tracks": tracks
});
client
.delete_json(&Endpoint::PlaylistTracks { id: playlist_id }.path(), &body)
.await
}