/**
 * BFF 共享 logger (pino 实例).
 *
 * 仲裁依据: coord-final-decisions §2 B8 (回写 teacher-bff, 3 个 BFF 统一使用)
 *           coord-final-decisions §1 G4 (首次实现即结构化日志, 禁止 console.log)
 *
 * 各 BFF 在自身 logger.ts 中调用 createBffLogger('student-bff' | 'teacher-bff' | 'parent-bff')
 * 获取带 service 标签的 pino 实例.
 *
 * 该 logger 也作为 DownstreamClient 默认 logger, 避免循环依赖.
 */
import pino, { type Logger as PinoLogger, type LoggerOptions } from "pino";

/**
 * 默认日志级别 (可通过环境变量 LOG_LEVEL 覆盖).
 */
const DEFAULT_LEVEL = process.env.LOG_LEVEL ?? "info";

/**
 * 是否开发模式 (启用 pino-pretty 美化输出).
 */
const IS_DEV = process.env.NODE_ENV === "development";

/**
 * 创建 BFF 共享 logger.
 *
 * @param serviceName 服务名 (student-bff / teacher-bff / parent-bff)
 * @param options 额外 pino 配置 (可选)
 */
export function createBffLogger(
  serviceName: string,
  options?: LoggerOptions,
): PinoLogger {
  const opts: LoggerOptions = {
    level: DEFAULT_LEVEL,
    base: {
      service: serviceName,
      version: "0.1.0",
    },
    transport: IS_DEV
      ? {
          target: "pino-pretty",
          options: { colorize: true },
        }
      : undefined,
    ...options,
  };
  return pino(opts);
}

/**
 * DownstreamClient 默认 logger (无 service 标签, 由调用方覆盖).
 * 各 BFF 不应直接使用此 logger, 应使用自身 createBffLogger() 产出实例.
 */
export const logger: PinoLogger = createBffLogger("bff-shared");

export type Logger = PinoLogger;
