# Copyright (c) 2025 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")

import("${chip_root}/build/chip/tools.gni")

import("${build_root}/config/linux/pkg_config.gni")

assert(chip_build_tools)

config("config") {
  cflags = [ "-Wno-shadow" ]

  if (is_clang) {
    # libdatachannel has a lot of these like:
    #   ...... libdatachannel/repo/include/rtc/h265nalunit.hpp:40:60: error: implicit conversion loses integer precision: 'int'
    #   to 'uint8_t' (aka 'unsigned char') [-Werror,-Wimplicit-int-conversion]
    #   40 |         uint8_t nuhLayerId() const { return ((_first & 0x1) << 5) | ((_second & 0b1111'1000) >> 3); }
    cflags += [ "-Wno-implicit-int-conversion" ]
  }

  include_dirs = [
    "include",
    "include/clusters/chime",
    "include/clusters/webrtc-provider",
    "include/clusters/camera-avstream-mgmt",
    "include/clusters/camera-avsettingsuserlevel-mgmt",
    "include/clusters/push-av-stream-transport",
    "include/clusters/zone-mgmt",
    "include/media-controller",
    "include/transport",
    "include/uploader",
    "include/pushav-transport",
    "${chip_root}/examples/camera-app/camera-common/include",
    "${chip_root}/examples/camera-app/camera-common/include/media-controller",
    "${chip_root}/examples/camera-app/camera-common/include/camera-avstream-controller",
    "${chip_root}/examples/camera-app/camera-common/include/webrtc-provider-controller",
    "${chip_root}/examples/camera-app/camera-common/include/transport",
    "${chip_root}/third_party/libdatachannel/repo/include",
  ]
}

pkg_config("ffmpeg") {
  packages = [
    "libavformat",
    "libavcodec",
    "libavutil",
  ]
}

pkg_config("gstreamer") {
  packages = [
    "gstreamer-1.0",
    "gstreamer-app-1.0",
    "gobject-2.0",
  ]
}

executable("chip-camera-app") {
  configs += [ ":config" ]

  configs += [ ":gstreamer" ]

  configs += [ ":ffmpeg" ]
  libs = [ "curl" ]

  sources = [
    "${chip_root}/examples/camera-app/linux/include/media-controller/default-media-controller.h",
    "${chip_root}/examples/camera-app/linux/include/pushav-prerollbuffer.h",
    "${chip_root}/examples/camera-app/linux/src/CameraAppCommandDelegate.cpp",
    "${chip_root}/examples/camera-app/linux/src/camera-device.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/camera-avsettingsuserlevel-mgmt/camera-avsettingsuserlevel-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/camera-avstream-mgmt/camera-av-stream-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/chime/chime-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/push-av-stream-transport/push-av-stream-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/webrtc-provider/webrtc-provider-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/clusters/zone-mgmt/zone-manager.cpp",
    "${chip_root}/examples/camera-app/linux/src/media-controller/default-media-controller.cpp",
    "${chip_root}/examples/camera-app/linux/src/pushav-clip-recorder.cpp",
    "${chip_root}/examples/camera-app/linux/src/pushav-prerollbuffer.cpp",
    "${chip_root}/examples/camera-app/linux/src/pushav-transport/pushav-transport.cpp",
    "${chip_root}/examples/camera-app/linux/src/uploader/pushav-uploader.cpp",
    "${chip_root}/examples/camera-app/linux/src/webrtc-libdatachannel.cpp",
    "${chip_root}/examples/camera-app/linux/src/webrtc-transport.cpp",
    "include/CHIPProjectAppConfig.h",
    "main.cpp",
  ]

  deps = [
    "${chip_root}/examples/camera-app/camera-common",
    "${chip_root}/examples/camera-app/camera-common:camera-lib",
    "${chip_root}/examples/platform/linux:app-main",
    "${chip_root}/src/lib",
    "${chip_root}/third_party/libdatachannel:libdatachannel",
  ]

  output_dir = root_out_dir
}

group("linux") {
  deps = [ ":chip-camera-app" ]
}

group("default") {
  deps = [ ":chip-camera-app" ]
}
