# Copyright (c) 2022-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/build.gni")
import("//build_overrides/chip.gni")

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

java_library("java") {
  output_name = "JavaMatterController.jar"
  deps = [
    "${chip_root}/src/controller/java",
    "${chip_root}/third_party/java_deps:annotation",
  ]

  sources = [
    "java/src/com/matter/controller/commands/common/FutureResult.java",
    "java/src/com/matter/controller/commands/common/RealResult.java",
  ]

  javac_flags = [ "-Xlint:deprecation" ]
}

kotlin_binary("java-matter-controller") {
  output_name = "java-matter-controller"
  deps = [
    ":java",
    "${chip_root}/src/controller/java:json_to_tlv_to_json_test",
    "${chip_root}/src/controller/java:onboarding_payload",
    "${chip_root}/src/controller/java:tlv_read_write_test",
    "${chip_root}/src/controller/java:tlv_reader_test",
    "${chip_root}/src/controller/java:tlv_writer_test",
    "${chip_root}/third_party/java_deps:kotlin-stdlib",
  ]

  sources = [
    "java/src/com/matter/controller/Main.kt",
    "java/src/com/matter/controller/commands/common/Argument.kt",
    "java/src/com/matter/controller/commands/common/ArgumentType.kt",
    "java/src/com/matter/controller/commands/common/Command.kt",
    "java/src/com/matter/controller/commands/common/CommandManager.kt",
    "java/src/com/matter/controller/commands/common/CredentialsIssuer.kt",
    "java/src/com/matter/controller/commands/common/IPAddress.kt",
    "java/src/com/matter/controller/commands/common/MatterCommand.kt",
    "java/src/com/matter/controller/commands/discover/DiscoverCommand.kt",
    "java/src/com/matter/controller/commands/discover/DiscoverCommissionablesCommand.kt",
    "java/src/com/matter/controller/commands/discover/DiscoverCommissionersCommand.kt",
    "java/src/com/matter/controller/commands/pairing/CloseSessionCommand.kt",
    "java/src/com/matter/controller/commands/pairing/DiscoveryFilterType.kt",
    "java/src/com/matter/controller/commands/pairing/PairAddressPaseCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairAlreadyDiscoveredCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairCodePaseCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkCommissionerCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkCommissioningModeCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkDeviceTypeCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkFabricCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkInstanceNameCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkLongCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImInvokeCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImReadCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImSubscribeCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkLongImWriteCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkShortCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairOnNetworkVendorCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairingCommand.kt",
    "java/src/com/matter/controller/commands/pairing/PairingModeType.kt",
    "java/src/com/matter/controller/commands/pairing/PairingNetworkType.kt",
    "java/src/com/matter/controller/commands/pairing/UnpairCommand.kt",
  ]

  kotlinc_flags = [ "-Xlint:deprecation" ]
}

group("default") {
  deps = [ ":java-matter-controller" ]
}
