use std::sync::Arc;
use axum::middleware;
use axum::routing::{get, post};
use axum::Router;
use dravr_tronc::mcp::transport::http::mcp_router as build_mcp_router;
use dravr_tronc::McpServer;
use crate::auth;
use crate::completions;
use crate::health;
use crate::models;
use crate::state::AppState;
use crate::uhp;
pub fn build(state: AppState) -> Router {
let mcp_server = Arc::new(McpServer::new(
"embacle-mcp",
env!("CARGO_PKG_VERSION"),
embacle_mcp::build_tool_registry(),
Arc::clone(&state.shared),
));
let mcp_router = build_mcp_router(mcp_server);
let openai = Router::new()
.route("/v1/chat/completions", post(completions::handle))
.route("/v1/models", get(models::handle))
.route("/health", get(health::handle))
.with_state(state.clone())
.merge(mcp_router)
.layer(middleware::from_fn(auth::require_auth));
let base = uhp::base_path();
let uhp_routes = uhp::router(state);
if base.is_empty() {
openai.merge(uhp_routes)
} else {
openai.nest(&base, uhp_routes)
}
}