/*
 * Copyright (c) 2020, Xiaomi and/or its affiliates. All rights reserved.
 *
 * 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 com.xiaomi.duckling.dimension.numeral

import com.xiaomi.duckling.Types.{Predicate, Token}

package object seq {

  def token(s: String, zh: Boolean, raw: String = ""): Token = {
    Token(DigitSequence, DigitSequenceData(s, zh, raw))
  }

  def isDigitOfWidth(n: Int): Predicate = {
    case Token(DigitSequence, DigitSequenceData(s, _, _)) => s.length == n
  }

  def isDigitLengthLt(n: Int): Predicate = {
    case Token(DigitSequence, DigitSequenceData(s, _, _)) => s.length < n
  }

  def isDigitLeading0: Predicate = {
    case Token(DigitSequence, DigitSequenceData(s, zh, _)) => s.startsWith("0")
  }

  def isDigitLengthGt(n: Int): Predicate = {
    case Token(DigitSequence, DigitSequenceData(s, _, _)) => s.length > n
  }

  def isZhDigit: Predicate = {
    case Token(DigitSequence, DigitSequenceData(_, zh, _)) => zh
  }
}
