/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

package org.apache.streampark.common.conf

/** Flink kubernetes Configuration for v1 version */
object K8sFlinkConfig {

  lazy val isV2Enabled: Boolean = InternalConfigHolder.get(ENABLE_V2)

  val ENABLE_V2: InternalOption = InternalOption(
    key = "streampark.flink-k8s.enable-v2",
    defaultValue = false,
    classType = classOf[java.lang.Boolean],
    description =
      "Whether to enable the v2 version(base on flink-kubernetes-operator) of flink kubernetes operation"
  )

  //  ======= deprecated =======

  @Deprecated
  val jobStatusTrackTaskTimeoutSec: InternalOption = InternalOption(
    key = "streampark.flink-k8s.tracking.polling-task-timeout-sec.job-status",
    defaultValue = 120L,
    classType = classOf[java.lang.Long],
    description = "run timeout seconds of single flink-k8s metrics tracking task"
  )

  @Deprecated
  val metricTrackTaskTimeoutSec: InternalOption = InternalOption(
    key = "streampark.flink-k8s.tracking.polling-task-timeout-sec.cluster-metric",
    defaultValue = 120L,
    classType = classOf[java.lang.Long],
    description = "run timeout seconds of single flink-k8s job status tracking task"
  )

  @Deprecated
  val jobStatueTrackTaskIntervalSec: InternalOption = InternalOption(
    key = "streampark.flink-k8s.tracking.polling-interval-sec.job-status",
    defaultValue = 5L,
    classType = classOf[java.lang.Long],
    description = "interval seconds between two single flink-k8s metrics tracking task"
  )

  @Deprecated
  val metricTrackTaskIntervalSec: InternalOption = InternalOption(
    key = "streampark.flink-k8s.tracking.polling-interval-sec.cluster-metric",
    defaultValue = 5L,
    classType = classOf[java.lang.Long],
    description = "interval seconds between two single flink-k8s metrics tracking task"
  )

  @Deprecated
  val silentStateJobKeepTrackingSec: InternalOption = InternalOption(
    key = "streampark.flink-k8s.tracking.silent-state-keep-sec",
    defaultValue = 60,
    classType = classOf[java.lang.Integer],
    description = "retained tracking time for SILENT state flink tasks"
  )

  /**
   * If an ingress controller is specified in the configuration, the ingress class
   * kubernetes.io/ingress.class must be specified when creating the ingress, since there are often
   * multiple ingress controllers in a production environment.
   */
  val ingressClass: InternalOption = InternalOption(
    key = "streampark.flink-k8s.ingress.class",
    defaultValue = "nginx",
    classType = classOf[java.lang.String],
    description = "Direct ingress to the ingress controller."
  )

  /** kubernetes default namespace */
  @Deprecated
  val DEFAULT_KUBERNETES_NAMESPACE = "default"

}
