# Copyright (c) 2023 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/chip.gni")

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

source_set("windows") {
  sources = [ "window.h" ]
}

static_library("qrcode") {
  sources = [
    "qrcode.cpp",
    "qrcode.h",
  ]

  deps = [
    ":windows",
    "${chip_root}/examples/common/QRCode",
    "${chip_root}/examples/platform/linux:app-main",
    "${chip_root}/src/app/server",
    "${chip_root}/src/setup_payload",
    "${chip_root}/third_party/imgui",
  ]

  public_configs =
      [ "${chip_root}/examples/common/QRCode:qrcode-common_config" ]
}

static_library("light") {
  sources = [
    "light.cpp",
    "light.h",
  ]

  deps = [
    ":windows",
    "${chip_root}/src/app/common:cluster-objects",
    "${chip_root}/third_party/imgui",
  ]

  # TODO: this is because on-off-server.h is generally only available
  #       in the app and we do not want to directly bind to lighting-app
  check_includes = false

  public_configs = [ "${chip_root}/src:includes" ]
}

static_library("boolean_state") {
  sources = [
    "boolean_state.cpp",
    "boolean_state.h",
  ]

  deps = [
    ":windows",
    "${chip_root}/src/app/common:cluster-objects",
    "${chip_root}/third_party/imgui",
  ]

  public_configs = [ "${chip_root}/src:includes" ]
}

static_library("occupancy_sensing") {
  sources = [
    "occupancy_sensing.cpp",
    "occupancy_sensing.h",
  ]

  deps = [
    ":windows",
    "${chip_root}/src/app/common:cluster-objects",
    "${chip_root}/third_party/imgui",
  ]

  public_configs = [ "${chip_root}/src:includes" ]
}
