-- Copyright (c) 2016-present, Facebook, Inc.
-- All rights reserved.
--
-- This source code is licensed under the BSD-style license found in the
-- LICENSE file in the root directory of this source tree. An additional grant
-- of patent rights can be found in the PATENTS file in the same directory.


{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}

module Duckling.Distance.Helpers
  ( distance
  , unitDistance
  , withUnit
  ) where


import Prelude

import Duckling.Dimensions.Types
import Duckling.Distance.Types (DistanceData(..))
import qualified Duckling.Distance.Types as TDistance
import Duckling.Types

-- -----------------------------------------------------------------
-- Patterns

unitDistance :: TDistance.Unit -> PatternItem
unitDistance value = Predicate $ \x -> case x of
  (Token Distance DistanceData {TDistance.unit = Just unit}) -> value == unit
  _ -> False

-- -----------------------------------------------------------------
-- Production

distance :: Double -> DistanceData
distance x = DistanceData {TDistance.value = x, TDistance.unit = Nothing}

withUnit :: TDistance.Unit -> DistanceData -> DistanceData
withUnit value dd = dd {TDistance.unit = Just value}