pub mod sys_controll;
pub mod test;
pub mod wechat;
pub mod web_path;
use crate::worker::invokefunction::{InvokeFunctionMsg, InvokeFunctionWorker};
use crate::worker::AppWorker;
use axum::Router;
use web_path::WebPath;
pub struct WebApi;

impl WebApi {
    pub fn routers() -> Router {
        let mut webpath = WebPath::new();

        webpath = webpath.merge(sys_controll::router_sys());
        webpath = webpath.merge(test::router_test());
        webpath = webpath.merge(wechat::router_wechat());

        webpath = webpath.final_to_path();
        let expand_path = webpath.get_last_level_paths();

        let invfun = InvokeFunctionMsg {
            job_id: None,
            callfun: "updateapi".to_owned(),
            parmets: serde_json::to_string(&expand_path).unwrap(),
        };
        tokio::spawn(async move {
            let _ = InvokeFunctionWorker::execute_async(invfun).await;
        });
        let mut router = Router::new();
        for p in expand_path {
            if let Some(method_router) = p.method_router.clone() {
                router = router.route(&p.final_path, method_router);
            }
        }

        Router::new().merge(router)
    }
    pub fn white_routers() -> Router {
        Router::new()
            .merge(sys_controll::white_sys())
            .merge(test::white_test())
            .merge(wechat::white_wechat())
    }
}