{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- : out example
module Biz.Bild.Example where

-- Both internal and external language dependencies are detected automatically
-- by bild, for example here we import 'Crypto.Saltine' and list 'saltine' in
-- 'Deps/Haskell.nix' to indicate that this is the package we want made
-- available to bild, which will index the external package and record its
-- modules for lookup.
import Alpha
import qualified Biz.Cli as Cli
import qualified Biz.Test as Test
import qualified Crypto.Saltine as Saltine
import qualified Crypto.Saltine.Core.SecretBox as Saltine

main :: IO ()
main = Cli.main <| Cli.Plan help move test pure

move :: Cli.Arguments -> IO ()
move _ = putStrLn "Hello world"

test :: Test.Tree
test =
  Test.group
    "Biz.Bild.Example"
    [ Test.unit "can use saltine package" <| do
        Saltine.sodiumInit
        k <- Saltine.newKey
        n <- Saltine.newNonce
        let msg = "foobar"
        let encryptedMsg = Saltine.secretbox k n <| str "foobar"
        Just msg Test.@=? str </ Saltine.secretboxOpen k n encryptedMsg
    ]

help :: Cli.Docopt
help =
  [Cli.docopt|
example that tests basic haskell build

Usage:
  example
  example test
|]