# 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}/src/setup_payload/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: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" ]
}
