use crate::server::app::AppState;
use crate::server::routes::query::query_value;
use axum::extract::State;
use axum::http::Uri;
use axum::response::{IntoResponse, Response};
use axum::routing::get;
use axum::{Json, Router};
use nomoreide_core::usage_info::build_usage_info;
use serde_json::json;
pub(crate) fn routes() -> Router<AppState> {
Router::new()
.route("/api/agent/usage", get(usage))
.route("/api/agent/usage/history", get(history))
}
pub(crate) fn daemon_cwd() -> String {
std::env::current_dir()
.map(|path| path.to_string_lossy().into_owned())
.unwrap_or_default()
}
async fn usage() -> Response {
Json(json!({ "ok": true, "usage": build_usage_info(&daemon_cwd()).await })).into_response()
}
async fn history(State(state): State<AppState>, uri: Uri) -> Response {
let since = query_value(&uri, "since");
let entries = state.usage_history.list(since.as_deref()).await;
let summary = state.usage_history.summary(since.as_deref()).await;
Json(json!({ "ok": true, "entries": entries, "summary": summary })).into_response()
}