"use strict";
const common_vendor = require("../../../../common/vendor.js");
const originalConsole = {
  log: console.log,
  info: console.info,
  warn: console.warn,
  error: console.error,
  debug: console.debug,
  trace: console.trace,
  table: console.table,
  time: console.time,
  timeEnd: console.timeEnd,
  group: console.group,
  groupEnd: console.groupEnd,
  groupCollapsed: console.groupCollapsed,
  assert: console.assert,
  clear: console.clear,
  count: console.count,
  countReset: console.countReset
};
Object.keys(originalConsole).forEach((key) => {
  const methodKey = key;
  if (!originalConsole[methodKey]) {
    originalConsole[methodKey] = () => {
    };
  }
});
class Logger {
  constructor() {
    this.debugMode = false;
    this.prefix = "[uViewPro]";
    this.showCallerInfo = true;
  }
  /**
   * 设置调试模式
   * @param enabled 是否启用调试模式
   */
  setDebugMode(enabled) {
    this.debugMode = !!enabled;
    if (this.debugMode) {
      common_vendor.index.__f__("log", "at uni_modules/uview-pro/libs/util/logger.ts:64", "[uViewPro] Debug mode enabled");
    } else {
      common_vendor.index.__f__("log", "at uni_modules/uview-pro/libs/util/logger.ts:66", "[uViewPro] Debug mode disabled");
    }
    return this;
  }
  /**
   * 设置是否显示调用者信息（文件名和行号）
   * @param show 是否显示调用者信息
   */
  setShowCallerInfo(show) {
    this.showCallerInfo = !!show;
    return this;
  }
  /**
   * 设置日志前缀
   * @param prefix 日志前缀
   */
  setPrefix(prefix) {
    if (prefix)
      this.prefix = prefix;
    return this;
  }
  /**
   * 获取当前调试模式状态
   * @returns 当前调试模式状态
   */
  getDebugMode() {
    return this.debugMode;
  }
  /**
   * 从文件路径中提取纯净的文件名（去除查询参数和路径）
   * @param filePath 文件路径
   * @returns 纯净的文件名
   */
  extractFileName(filePath) {
    if (!filePath)
      return "";
    const withoutQuery = filePath.split("?")[0];
    const parts = withoutQuery.split(/[/\\]/);
    const fileNameWithExt = parts.pop() || "";
    return fileNameWithExt;
  }
  /**
   * 获取调用者信息（文件名和行号）
   * @returns 调用者信息字符串
   */
  getCallerInfo() {
    if (!this.showCallerInfo)
      return "";
    try {
      const error = new Error();
      const stack = error.stack;
      if (!stack)
        return "";
      const stackLines = stack.split("\n");
      for (let i = 3; i < stackLines.length; i++) {
        const line = stackLines[i].trim();
        if (line && !line.includes("logger.ts") && !line.includes("Logger.") && !line.includes("at Object.")) {
          const match = line.match(/\(?(.*):(\d+):(\d+)\)?/);
          if (match) {
            const filePath = match[1];
            const lineNumber = match[2];
            const fileName = this.extractFileName(filePath);
            return `[${fileName}:${lineNumber}]`;
          }
          break;
        }
      }
    } catch (e) {
    }
    return "";
  }
  /**
   * 通用日志输出方法
   * @param level 日志级别
   * @param args 日志参数
   */
  output(level, ...args) {
    if (!this.debugMode || !originalConsole[level])
      return;
    const method = originalConsole[level];
    const callerInfo = this.getCallerInfo();
    if (this.prefix) {
      if (callerInfo) {
        method(`${this.prefix}${callerInfo}`, ...args);
      } else {
        method(this.prefix, ...args);
      }
    } else {
      if (callerInfo) {
        method(callerInfo, ...args);
      } else {
        method(...args);
      }
    }
  }
  /**
   * 普通日志
   * @param args 日志参数
   */
  log(...args) {
    this.output("log", ...args);
  }
  /**
   * 信息日志
   * @param args 日志参数
   */
  info(...args) {
    this.output("info", ...args);
  }
  /**
   * 警告日志
   * @param args 日志参数
   */
  warn(...args) {
    this.output("warn", ...args);
  }
  /**
   * 错误日志
   * @param args 日志参数
   */
  error(...args) {
    this.output("error", ...args);
  }
  /**
   * 调试日志
   * @param args 日志参数
   */
  debug(...args) {
    if (!originalConsole.debug)
      return;
    this.output("debug", ...args);
  }
  /**
   * 堆栈跟踪
   * @param args 日志参数
   */
  trace(...args) {
    if (!originalConsole.trace)
      return;
    this.output("trace", ...args);
  }
  /**
   * 表格输出
   * @param data 表格数据
   * @param columns 列名（可选）
   */
  table(data, columns) {
    if (!this.debugMode || !originalConsole.table)
      return;
    if (this.prefix) {
      originalConsole.log(this.prefix);
    }
    originalConsole.table(data, columns);
  }
  /**
   * 开始计时
   * @param label 计时器标签
   */
  time(label) {
    if (!this.debugMode || !originalConsole.time)
      return;
    const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
    originalConsole.time(fullLabel);
  }
  /**
   * 结束计时
   * @param label 计时器标签
   */
  timeEnd(label) {
    if (!this.debugMode || !originalConsole.timeEnd)
      return;
    const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
    originalConsole.timeEnd(fullLabel);
  }
  /**
   * 分组日志
   * @param label 分组标签
   */
  group(label) {
    if (!this.debugMode || !originalConsole.group)
      return;
    const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
    originalConsole.group(fullLabel);
  }
  /**
   * 结束分组
   */
  groupEnd() {
    if (!this.debugMode || !originalConsole.groupEnd)
      return;
    originalConsole.groupEnd();
  }
  /**
   * 分组日志（默认折叠）
   * @param label 分组标签
   */
  groupCollapsed(label) {
    if (!this.debugMode || !originalConsole.groupCollapsed)
      return;
    const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
    originalConsole.groupCollapsed(fullLabel);
  }
  /**
   * 断言
   * @param condition 条件
   * @param message 错误消息
   */
  assert(condition, ...message) {
    if (!this.debugMode || !originalConsole.assert)
      return;
    if (this.prefix) {
      originalConsole.assert(condition, this.prefix, ...message);
    } else {
      originalConsole.assert(condition, ...message);
    }
  }
  /**
   * 清空控制台
   */
  clear() {
    if (!this.debugMode || !originalConsole.clear)
      return;
    originalConsole.clear();
  }
  /**
   * 计数器
   * @param label 计数器标签
   */
  count(label) {
    if (!this.debugMode || !originalConsole.count)
      return;
    const fullLabel = this.prefix && label ? `${this.prefix} ${label}` : label || this.prefix;
    originalConsole.count(fullLabel);
  }
  /**
   * 重置计数器
   * @param label 计数器标签
   */
  countReset(label) {
    if (!this.debugMode || !originalConsole.countReset)
      return;
    const fullLabel = this.prefix && label ? `${this.prefix} ${label}` : label || this.prefix;
    originalConsole.countReset(fullLabel);
  }
  /**
   * 带样式的日志
   * @param style CSS样式
   * @param message 消息内容
   */
  styled(style, message) {
    if (!this.debugMode)
      return;
    const callerInfo = this.getCallerInfo();
    const fullMessage = callerInfo ? `${message} ${callerInfo}` : message;
    if (this.prefix) {
      common_vendor.index.__f__("log", "at uni_modules/uview-pro/libs/util/logger.ts:353", `%c${this.prefix} ${fullMessage}`, style);
    } else {
      common_vendor.index.__f__("log", "at uni_modules/uview-pro/libs/util/logger.ts:355", `%c${fullMessage}`, style);
    }
  }
}
const logger = new Logger();
exports.logger = logger;
//# sourceMappingURL=../../../../../.sourcemap/mp-weixin/uni_modules/uview-pro/libs/util/logger.js.map
