use crate::api::rest::get_favicon;
use crate::api::rest::handlers::{
advance_step, create_session, delete_session, get_current_step, replace_session, update_session,
};
use crate::api::rest::middleware::metrics_endpoint;
use crate::api::rest::swagger::ApiDoc;
use crate::infrastructure::{MetricsCollector, MongoDBRepository};
use crate::session::SessionManager;
use actix_web::web;
use std::sync::Arc;
use utoipa::OpenApi;
use utoipa_swagger_ui::SwaggerUi;
pub fn configure_routes(
cfg: &mut web::ServiceConfig,
session_manager: Arc<SessionManager>,
metrics_collector: Arc<MetricsCollector>,
mongodb_repo: Arc<MongoDBRepository>,
) {
cfg.app_data(web::Data::new(session_manager))
.app_data(web::Data::new(metrics_collector.clone()))
.app_data(web::Data::new(mongodb_repo))
.service(
web::resource("/api/v1/chain")
.route(web::post().to(create_session))
.route(web::get().to(get_current_step))
.route(web::put().to(replace_session))
.route(web::patch().to(update_session))
.route(web::delete().to(delete_session)),
)
.service(web::resource("/api/v1/chain/step").route(web::post().to(advance_step)))
.route("/metrics", web::get().to(metrics_endpoint))
.route("/favicon.ico", web::get().to(get_favicon))
.service(
SwaggerUi::new("/swagger-ui/{_:.*}").url("/api-docs/openapi.json", ApiDoc::openapi()),
);
}