{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}

module Cardano.Ledger
  where

import Data.Aeson (decode, eitherDecode, encode)
import Data.Text (Text)
import qualified Money
import Test.Hspec
import Test.Tasty.Hspec
import Text.RawString.QQ

import Blockfrost.Types

spec_ledger :: Spec
spec_ledger = do
  it "parses ledger genesis sample" $ do
    eitherDecode ledgerGenesisSample
    `shouldBe`
    Right ledgerGenesisExpected

ledgerGenesisSample = [r|
{
    "active_slots_coefficient": 0.05,
    "update_quorum": 5,
    "max_lovelace_supply": "45000000000000000",
    "network_magic": 764824073,
    "epoch_length": 432000,
    "system_start": 1506203091,
    "slots_per_kes_period": 129600,
    "slot_length": 1,
    "max_kes_evolutions": 62,
    "security_param": 2160
}
|]

ledgerGenesisExpected =
  Genesis
    { _genesisActiveSlotsCoefficient = 0.05
    , _genesisUpdateQuorum = 5
    , _genesisMaxLovelaceSupply = 45_000_000_000_000_000
    , _genesisNetworkMagic = 764824073
    , _genesisEpochLength = 432_000
    , _genesisSystemStart = 1506203091
    , _genesisSlotsPerKesPeriod = 129600
    , _genesisSlotLength = 1
    , _genesisMaxKesEvolutions  = 62
    , _genesisSecurityParam  = 2160
    }