use std::sync::Arc;
use axum::extract::{Path, State};
use axum::response::Response;
use super::responses::png_image;
use crate::common::AppData;
use crate::ui::proxy::map_error_to_image;
use crate::web::api::server::v1::extractors::optional_user_id::ExtractOptionalLoggedInUser;
#[allow(clippy::unused_async)]
pub async fn get_proxy_image_handler(
State(app_data): State<Arc<AppData>>,
ExtractOptionalLoggedInUser(maybe_user_id): ExtractOptionalLoggedInUser,
Path(url): Path<String>,
) -> Response {
let image_url = urlencoding::decode(&url).unwrap_or_default().into_owned();
match app_data.proxy_service.get_image_by_url(&image_url, maybe_user_id).await {
Ok(image_bytes) => {
png_image(image_bytes)
}
Err(e) => {
png_image(map_error_to_image(&e))
}
}
}