//! 诊断日志系统
//!
//! 通过环境变量 `TSN_LOG` 控制输出：
//!   TSN_LOG=1          — 启用所有诊断日志
//!   TSN_LOG=all        — 启用所有诊断日志（同 =1）
//!   TSN_LOG=codegen    — 仅启用 codegen 相关日志
//!   TSN_LOG=transform  — 仅启用 SWC transform 相关日志
//!   TSN_LOG=project    — 仅启用 project_compiler 相关日志
//!   TSN_LOG=codegen,transform  — 启用多个分类（逗号分隔）
//!
//! 日志宏用法（与 eprintln! 相同）：
//!   tsn_diag_codegen!(...);          // codegen 分类，前置 [TSN-CODEGEN]
//!   tsn_diag_transform!(...);        // swc_transform 分类，前置 [TSN-TRANSFORM]
//!   tsn_diag_project!(...);          // project_compiler 分类，前置 [TSN-PROJECT]

/// 检查环境变量是否启用某类诊断日志（供宏内部使用）
pub fn is_log_enabled(category: &str) -> bool {
    match std::env::var("TSN_LOG") {
        Ok(val) => {
            let val = val.trim();
            if val == "1" || val == "diag" || val == "all" {
                return true; // 启用所有分类
            }
            // 逗号分隔的多分类
            val.split(',')
                .map(|s| s.trim())
                .any(|c| c == category)
        }
        Err(_) => false,
    }
}

/// Codegen 分类诊断日志
#[macro_export]
macro_rules! tsn_diag_codegen {
    ($($arg:tt)*) => {
        if $crate::diag::is_log_enabled("codegen") {
            eprintln!("[TSN-CODEGEN] {}", format_args!($($arg)*));
        }
    };
}

/// SWC transform 分类诊断日志
#[macro_export]
macro_rules! tsn_diag_transform {
    ($($arg:tt)*) => {
        if $crate::diag::is_log_enabled("transform") {
            eprintln!("[TSN-TRANSFORM] {}", format_args!($($arg)*));
        }
    };
}

/// Project compiler 分类诊断日志
#[macro_export]
macro_rules! tsn_diag_project {
    ($($arg:tt)*) => {
        if $crate::diag::is_log_enabled("project") {
            eprintln!("[TSN-PROJECT] {}", format_args!($($arg)*));
        }
    };
}
