use axum::{
Router,
routing::{get, post},
};
use tower_http::trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer};
use tracing::Level;
use super::handlers;
use super::state::AppState;
pub fn build(state: AppState) -> Router {
Router::new()
.route("/", get(handlers::root))
.route("/health", get(handlers::health))
.route("/api/spec", get(handlers::api_catalog))
.route(
"/api/bilibili/video/{bvid}",
get(handlers::bilibili_video_info),
)
.route(
"/api/bilibili/video/{aid}/stream",
get(handlers::bilibili_video_stream),
)
.route(
"/api/bilibili/video/{cid}/danmaku",
get(handlers::bilibili_video_danmaku),
)
.route(
"/api/bilibili/bangumi/{bangumi_id}",
get(handlers::bilibili_bangumi_info),
)
.route(
"/api/bilibili/bangumi/{ep_id}/stream",
get(handlers::bilibili_bangumi_stream),
)
.route(
"/api/bilibili/article/{id}/content",
get(handlers::bilibili_article_content),
)
.route(
"/api/bilibili/article/cards",
get(handlers::bilibili_article_cards),
)
.route(
"/api/bilibili/article/{id}",
get(handlers::bilibili_article_info),
)
.route(
"/api/bilibili/article-list/{id}",
get(handlers::bilibili_article_list_info),
)
.route(
"/api/bilibili/captcha",
post(handlers::bilibili_captcha_from_voucher),
)
.route(
"/api/bilibili/captcha/validate",
post(handlers::bilibili_validate_captcha),
)
.route(
"/api/bilibili/user/{host_mid}",
get(handlers::bilibili_user_card),
)
.route(
"/api/bilibili/user/{host_mid}/dynamics",
get(handlers::bilibili_user_dynamic_list),
)
.route(
"/api/bilibili/user/{host_mid}/space",
get(handlers::bilibili_user_space_info),
)
.route(
"/api/bilibili/user/{host_mid}/total-views",
get(handlers::bilibili_uploader_total_views),
)
.route(
"/api/bilibili/comments/{oid}",
get(handlers::bilibili_comments),
)
.route(
"/api/bilibili/comment-replies/{oid}/{root}",
get(handlers::bilibili_comment_replies),
)
.route(
"/api/bilibili/dynamic/{dynamic_id}",
get(handlers::bilibili_dynamic_detail),
)
.route(
"/api/bilibili/dynamic/{dynamic_id}/card",
get(handlers::bilibili_dynamic_card),
)
.route(
"/api/bilibili/live/{room_id}",
get(handlers::bilibili_live_room_info),
)
.route(
"/api/bilibili/live/{room_id}/init",
get(handlers::bilibili_live_room_init),
)
.route(
"/api/bilibili/auth/status",
get(handlers::bilibili_login_status),
)
.route(
"/api/bilibili/auth/qrcode",
get(handlers::bilibili_login_qrcode),
)
.route(
"/api/bilibili/auth/qrcode/status",
get(handlers::bilibili_qrcode_status),
)
.route("/api/bilibili/emoji", get(handlers::bilibili_emoji_list))
.route(
"/api/bilibili/convert/av/{aid}",
get(handlers::bilibili_av_to_bv),
)
.route(
"/api/bilibili/convert/bv/{bvid}",
get(handlers::bilibili_bv_to_av),
)
.route(
"/api/douyin/work/{aweme_id}",
get(handlers::douyin_parse_work),
)
.route(
"/api/douyin/work/{aweme_id}/video",
get(handlers::douyin_video_work),
)
.route(
"/api/douyin/work/{aweme_id}/image-album",
get(handlers::douyin_image_album_work),
)
.route(
"/api/douyin/work/{aweme_id}/slides",
get(handlers::douyin_slides_work),
)
.route(
"/api/douyin/work/{aweme_id}/text",
get(handlers::douyin_text_work),
)
.route(
"/api/douyin/comments/{aweme_id}",
get(handlers::douyin_work_comments),
)
.route(
"/api/douyin/comment-replies/{aweme_id}/{comment_id}",
get(handlers::douyin_comment_replies),
)
.route("/api/douyin/emoji", get(handlers::douyin_emoji_list))
.route(
"/api/douyin/emoji/dynamic",
get(handlers::douyin_dynamic_emoji_list),
)
.route(
"/api/douyin/user/{sec_uid}",
get(handlers::douyin_user_profile),
)
.route(
"/api/douyin/user/{sec_uid}/videos",
get(handlers::douyin_user_video_list),
)
.route(
"/api/douyin/user/{sec_uid}/favorites",
get(handlers::douyin_user_favorite_list),
)
.route(
"/api/douyin/user/{sec_uid}/recommends",
get(handlers::douyin_user_recommend_list),
)
.route("/api/douyin/search", get(handlers::douyin_search))
.route(
"/api/douyin/search/suggest",
get(handlers::douyin_suggest_words),
)
.route(
"/api/douyin/music/{music_id}",
get(handlers::douyin_music_info),
)
.route(
"/api/douyin/live/{room_id}",
get(handlers::douyin_live_room_info),
)
.route(
"/api/douyin/auth/qrcode",
get(handlers::douyin_login_qrcode),
)
.route(
"/api/douyin/danmaku/{aweme_id}",
get(handlers::douyin_danmaku_list),
)
.route(
"/api/kuaishou/work/{photo_id}",
get(handlers::kuaishou_video_work),
)
.route(
"/api/kuaishou/comments/{photo_id}",
get(handlers::kuaishou_work_comments),
)
.route("/api/kuaishou/emoji", get(handlers::kuaishou_emoji_list))
.route(
"/api/kuaishou/user/{principal_id}",
get(handlers::kuaishou_user_profile),
)
.route(
"/api/kuaishou/user/{principal_id}/works",
get(handlers::kuaishou_user_work_list),
)
.route(
"/api/kuaishou/live/{principal_id}",
get(handlers::kuaishou_live_room_info),
)
.route(
"/api/twitter/user/{screen_name}",
get(handlers::twitter_user_profile),
)
.route(
"/api/twitter/user/{screen_name}/timeline",
get(handlers::twitter_user_timeline),
)
.route(
"/api/twitter/user/{screen_name}/replies",
get(handlers::twitter_user_replies),
)
.route(
"/api/twitter/user/{screen_name}/media",
get(handlers::twitter_user_media),
)
.route(
"/api/twitter/user/{screen_name}/followers",
get(handlers::twitter_user_followers),
)
.route(
"/api/twitter/user/{screen_name}/following",
get(handlers::twitter_user_following),
)
.route("/api/twitter/user/likes", get(handlers::twitter_user_likes))
.route(
"/api/twitter/user/bookmarks",
get(handlers::twitter_user_bookmarks),
)
.route(
"/api/twitter/user/followed",
get(handlers::twitter_user_followed),
)
.route(
"/api/twitter/user/recommended",
get(handlers::twitter_user_recommended),
)
.route(
"/api/twitter/search/tweets",
get(handlers::twitter_search_tweets),
)
.route(
"/api/twitter/search/users",
get(handlers::twitter_search_users),
)
.route(
"/api/twitter/tweet/{tweet_id}",
get(handlers::twitter_tweet_detail),
)
.route(
"/api/twitter/tweet/{tweet_id}/replies",
get(handlers::twitter_tweet_replies),
)
.route(
"/api/twitter/tweet/{tweet_id}/likers",
get(handlers::twitter_tweet_likers),
)
.route(
"/api/twitter/tweet/{tweet_id}/retweeters",
get(handlers::twitter_tweet_retweeters),
)
.route(
"/api/twitter/space/{space_id}",
get(handlers::twitter_space_detail),
)
.route(
"/api/xiaohongshu/feed",
get(handlers::xiaohongshu_home_feed),
)
.route(
"/api/xiaohongshu/note/{note_id}",
get(handlers::xiaohongshu_note_detail),
)
.route(
"/api/xiaohongshu/comments/{note_id}",
get(handlers::xiaohongshu_note_comments),
)
.route(
"/api/xiaohongshu/user/{user_id}",
get(handlers::xiaohongshu_user_profile),
)
.route(
"/api/xiaohongshu/user/{user_id}/notes",
get(handlers::xiaohongshu_user_note_list),
)
.route(
"/api/xiaohongshu/emoji",
get(handlers::xiaohongshu_emoji_list),
)
.route(
"/api/xiaohongshu/search",
get(handlers::xiaohongshu_search_notes),
)
.route(
"/api/spec/{platform}",
get(handlers::platform_catalog_by_name),
)
.layer(
TraceLayer::new_for_http()
.make_span_with(DefaultMakeSpan::new().level(Level::INFO))
.on_response(DefaultOnResponse::new().level(Level::INFO)),
)
.with_state(state)
}