use std::sync::Arc;
use axum::{
Json,
extract::{Path as AxumPath, State},
http::StatusCode,
response::IntoResponse,
};
use crate::daemon::state::DaemonState;
use crate::session_manager::ManagedError;
use super::{parse_id, record_to_summary};
pub async fn reactivate_managed_session(
State(state): State<Arc<DaemonState>>,
AxumPath(id_str): AxumPath<String>,
) -> impl IntoResponse {
let id = match parse_id(&id_str) {
Ok(id) => id,
Err((code, msg)) => return (code, msg).into_response(),
};
let mgr = state.session_manager().await;
match mgr.mark_reactivated(&id).await {
Ok(record) => Json(record_to_summary(&record)).into_response(),
Err(ManagedError::SessionNotFound(_)) => {
(StatusCode::NOT_FOUND, format!("session {id_str} not found")).into_response()
}
Err(ManagedError::InvalidState(_, reason)) => {
(StatusCode::CONFLICT, reason).into_response()
}
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()).into_response(),
}
}