# Copyright (c) 2020 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/buildconfig_header.gni")
import("icd.gni")

# ICD Server sources and configurations

buildconfig_header("icd_buildconfig") {
  header = "ICDBuildConfig.h"
  header_dir = "app/icd"

  defines = [
    "CHIP_CONFIG_ENABLE_ICD_SERVER=${chip_enable_icd_server}",
    "ICD_REPORT_ON_ENTER_ACTIVE_MODE=${chip_icd_report_on_active_mode}",
    "ICD_MAX_NOTIFICATION_SUBSCRIBERS=${icd_max_notification_subscribers}",
    "ICD_ENFORCE_SIT_SLOW_POLL_LIMIT=${icd_enforce_sit_slow_poll_limit}",
  ]

  visibility = [ ":icd_config" ]
}

source_set("icd_config") {
  sources = [ "ICDConfig.h" ]

  deps = [ ":icd_buildconfig" ]
}

source_set("observer") {
  sources = [ "ICDStateObserver.h" ]
}

source_set("notifier") {
  sources = [
    "ICDNotifier.cpp",
    "ICDNotifier.h",
  ]

  deps = [
    ":icd_config",
    "${chip_root}/src/lib/core",
  ]
}

# ICD Manager source-set is broken out of the main source-set to enable unit tests
# All sources and configurations used by the ICDManager need to go in this source-set
source_set("manager") {
  sources = [
    "ICDManager.cpp",
    "ICDManager.h",
  ]

  deps = [ ":icd_config" ]

  public_deps = [
    ":configuration-data",
    ":monitoring-table",
    ":notifier",
    ":observer",
    ":sender",
    "${chip_root}/src/credentials:credentials",
  ]
}

source_set("sender") {
  sources = [
    "ICDCheckInSender.cpp",
    "ICDCheckInSender.h",
  ]

  public_deps = [
    ":configuration-data",
    ":monitoring-table",
    ":notifier",
    "${chip_root}/src/credentials:credentials",
    "${chip_root}/src/lib/address_resolve:address_resolve",
    "${chip_root}/src/protocols/secure_channel",
  ]
}

# ICDMonitoringTable source-set is broken out of the main source-set to enable unit tests
# All sources and configurations used by the ICDMonitoringTable need to go in this source-set
source_set("monitoring-table") {
  sources = [
    "ICDMonitoringTable.cpp",
    "ICDMonitoringTable.h",
  ]

  public_deps = [
    "${chip_root}/src/lib/core",
    "${chip_root}/src/platform:platform",
  ]
}

source_set("configuration-data") {
  sources = [
    "ICDConfigurationData.cpp",
    "ICDConfigurationData.h",
  ]

  deps = [
    ":icd_config",
    "${chip_root}/src/lib/core",
  ]
}
