load("@fbcode//quic:defs.bzl", "mvfst_cpp_library")

oncall("traffic_protocols")

mvfst_cpp_library(
    name = "qlogger_constants",
    srcs = [
        "QLoggerConstants.cpp",
    ],
    headers = [
        "QLoggerConstants.h",
    ],
    exported_deps = [
        "//quic:constants",
        "//quic/codec:types",
    ],
)

mvfst_cpp_library(
    name = "qlog_schema",
    srcs = [
        "QLogSchema.cpp",
    ],
    headers = [
        "QLogSchema.h",
    ],
    deps = [
        ":qlogger_constants",
    ],
    exported_deps = [
        "//folly/json:dynamic",
        "//quic:constants",
    ],
)

mvfst_cpp_library(
    name = "qlogger",
    srcs = [
        "QLogger.cpp",
    ],
    headers = [
        "QLogger.h",
    ],
    exported_deps = [
        ":qlogger_constants",
        "//quic/codec:types",
        "//quic/priority:priority_queue",
    ],
)

mvfst_cpp_library(
    name = "qlogger_macros",
    headers = select({
        # Server/desktop builds get full implementation
        "DEFAULT": {"QLoggerMacros.h": "QLoggerMacros.h"},
        # Mobile apps that opt-in get full implementation
        "fbsource//tools/build_defs/config/apps/shared:quic-qlog-enabled-android": {
            "QLoggerMacros.h": "QLoggerMacros.h",
        },
        "fbsource//tools/build_defs/config/apps/shared:quic-qlog-enabled-iphoneos": {
            "QLoggerMacros.h": "QLoggerMacros.h",
        },
        # Fallback for mobile platforms without explicit opt-in
        "ovr_config//os/constraints:android": {"QLoggerMacros.h": "facebook/QLoggerMacrosMobile.h"},
        "ovr_config//os/constraints:iphoneos": {"QLoggerMacros.h": "facebook/QLoggerMacrosMobile.h"},
    }),
    exported_deps = select({
        "DEFAULT": [":qlogger"],
        "fbsource//tools/build_defs/config/apps/shared:quic-qlog-enabled-android": [":qlogger"],
        "fbsource//tools/build_defs/config/apps/shared:quic-qlog-enabled-iphoneos": [":qlogger"],
        "ovr_config//os/constraints:android": [],
        "ovr_config//os/constraints:iphoneos": [],
    }),
)

mvfst_cpp_library(
    name = "base_qlogger",
    srcs = [
        "BaseQLogger.cpp",
        "QLoggerTypes.cpp",
    ],
    headers = [
        "BaseQLogger.h",
        "QLoggerTypes.h",
    ],
    deps = [
        "//folly/lang:bits",
        "//quic:exception",
        "//quic/common:string_utils",
    ],
    exported_deps = [
        ":qlogger",
        ":qlogger_constants",
        "//folly:dynamic",
        "//quic/codec:types",
        "//quic/priority:priority_queue",
    ],
)

mvfst_cpp_library(
    name = "file_qlogger",
    srcs = [
        "FileQLogger.cpp",
    ],
    headers = [
        "FileQLogger.h",
    ],
    deps = [
        "//folly:dynamic",
        "//quic/common:mvfst_logging",
    ],
    exported_deps = [
        ":base_qlogger",
        ":qlog_schema",
        ":qlogger_constants",
        "//folly:dynamic",
        "//folly/compression:compression",
        "//folly/logging:logging",
        "//quic/codec:types",
    ],
)

mvfst_cpp_library(
    name = "qlogger_common",
    srcs = ["QLoggerCommon.cpp"],
    headers = ["QLoggerCommon.h"],
    exported_deps = [
        ":base_qlogger",
        ":qlogger_constants",
    ],
)
