use std::sync::Arc;
use axum::Router;
use axum::routing::{delete, get, post};
use crate::auth::auth_middleware;
use crate::cluster_handlers;
use crate::state::AppState;
use crate::webhook;
mod handlers;
pub fn router(state: Arc<AppState>) -> Router {
let public = Router::new()
.route("/metrics", get(crate::metrics::metrics_handler))
.route("/api/v1/ws/agent", get(crate::ws_handler::ws_agent_handler))
.with_state(state.clone());
let authed = Router::new()
.route("/api/v1/health", get(handlers::health))
.route("/api/v1/deploy", post(handlers::deploy))
.route("/api/v1/status", get(handlers::status))
.route("/api/v1/services/{name}/logs", get(handlers::logs))
.route("/api/v1/services/{name}/scale", post(handlers::scale))
.route("/api/v1/services/{name}/rollback", post(handlers::rollback))
.route("/api/v1/services/{name}/redeploy", post(handlers::redeploy))
.route("/api/v1/services/{name}/promote", post(handlers::promote))
.route("/api/v1/services/{name}", delete(handlers::stop_service))
.route("/api/v1/projects/{project}", delete(handlers::stop_project))
.route("/api/v1/stop", post(handlers::stop_all))
.route("/api/v1/secrets", get(handlers::secrets::list_secrets))
.route("/api/v1/secrets/{key}", post(handlers::secrets::set_secret))
.route(
"/api/v1/secrets/{key}",
delete(handlers::secrets::remove_secret),
)
.merge(webhook::webhook_router())
.merge(cluster_handlers::cluster_router())
.layer(axum::middleware::from_fn_with_state(
state.clone(),
auth_middleware,
))
.with_state(state);
public.merge(authed)
}