use axum::Router;
use std::sync::Arc;
use crate::presentation::http::{
create_pos_closing_entry_routes,
create_pos_closing_entry_read_routes,
create_pos_invoice_routes,
create_pos_invoice_read_routes,
create_pos_invoice_item_routes,
create_pos_invoice_item_read_routes,
create_pos_payment_routes,
create_pos_payment_read_routes,
create_pos_profile_routes,
create_pos_profile_read_routes,
create_pos_opening_entry_routes,
create_pos_opening_entry_read_routes,
create_pos_cash_movement_routes,
create_pos_cash_movement_read_routes
};
use crate::handlers::AppState;
pub fn create_stateless_routes(module: &crate::PosModule) -> Router<()> {
Router::new()
.merge(create_pos_closing_entry_routes(module.pos_closing_entry_service.clone()))
.merge(create_pos_invoice_routes(module.pos_invoice_service.clone()))
.merge(create_pos_invoice_item_routes(module.pos_invoice_item_service.clone()))
.merge(create_pos_payment_routes(module.pos_payment_service.clone()))
.merge(create_pos_profile_routes(module.pos_profile_service.clone()))
.merge(create_pos_opening_entry_routes(module.pos_opening_entry_service.clone()))
.merge(create_pos_cash_movement_routes(module.pos_cash_movement_service.clone()))
}
pub fn create_readonly_pos_routes(module: &crate::PosModule) -> Router<()> {
Router::new()
.merge(create_pos_closing_entry_read_routes(module.pos_closing_entry_service.clone()))
.merge(create_pos_invoice_read_routes(module.pos_invoice_service.clone()))
.merge(create_pos_invoice_item_read_routes(module.pos_invoice_item_service.clone()))
.merge(create_pos_payment_read_routes(module.pos_payment_service.clone()))
.merge(create_pos_profile_read_routes(module.pos_profile_service.clone()))
.merge(create_pos_opening_entry_read_routes(module.pos_opening_entry_service.clone()))
.merge(create_pos_cash_movement_read_routes(module.pos_cash_movement_service.clone()))
}
pub fn get_routes(module: &crate::PosModule) -> Router<()> {
Router::new()
.nest("/api/v1", create_stateless_routes(module))
}
pub fn create_stateful_routes() -> Router<AppState> {
Router::new()
}
pub fn create_combined_routes(module: &crate::PosModule) -> Router<AppState> {
let crud_routes: Router<()> = create_stateless_routes(module);
let crud_routes_stateful: Router<AppState> = crud_routes.with_state(()).into();
Router::new()
.merge(crud_routes_stateful)
.merge(create_stateful_routes())
}
pub fn get_routes_with_state(module: &crate::PosModule) -> Router<AppState> {
Router::new()
.nest("/api/v1", create_combined_routes(module))
}