/*
 * Copyright 2018 Comcast Cable Communications Management, LLC
 *
 * 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.
 */

package vinyldns.api.config

import com.comcast.ip4s.IpAddress
import com.typesafe.config.Config
import pureconfig.ConfigReader
import vinyldns.api.domain.zone.ZoneRecordValidations

import scala.collection.JavaConverters._
import scala.util.matching.Regex

final case class ManualReviewConfig(
    enabled: Boolean,
    domainList: List[Regex],
    ipList: List[IpAddress],
    zoneList: Set[String]
)
object ManualReviewConfig {
  import ZoneRecordValidations.toCaseIgnoredRegexList
  implicit val configReader: ConfigReader[ManualReviewConfig] =
    ConfigReader.forProduct2[ManualReviewConfig, Boolean, Config](
      "manual-batch-review-enabled",
      "manual-review-domains"
    ) {
      case (enabled, domainsConfig) =>
        ManualReviewConfig(
          enabled,
          toCaseIgnoredRegexList(domainsConfig.getStringList("domain-list").asScala.toList),
          domainsConfig.getStringList("ip-list").asScala.toList.flatMap(IpAddress.fromString(_)),
          domainsConfig.getStringList("zone-name-list").asScala.toSet
        )
    }
}
