use axum::Router;
use axum::middleware;
use axum::routing::{get, post};
use zeph_common::http_middleware::{AuthConfig, auth_middleware};
use super::AppState;
use super::handlers::{
create_session_handler, delete_session_handler, events_session_handler, fork_session_handler,
get_session_handler, health_handler, list_sessions_handler, prompt_session_handler,
};
pub(super) fn build_router(
state: AppState,
auth_token: Option<&str>,
require_auth: bool,
) -> Router {
let auth_cfg = AuthConfig::new(auth_token, require_auth);
let protected = Router::new()
.route(
"/sessions",
post(create_session_handler).get(list_sessions_handler),
)
.route(
"/sessions/{id}",
get(get_session_handler).delete(delete_session_handler),
)
.route("/sessions/{id}/prompt", post(prompt_session_handler))
.route("/sessions/{id}/events", get(events_session_handler))
.route("/sessions/{id}/fork", post(fork_session_handler))
.layer(middleware::from_fn_with_state(auth_cfg, auth_middleware));
Router::new()
.route("/health", get(health_handler))
.merge(protected)
.with_state(state)
}