module Data.HashFlare.Projection where
import Data.HashFlare
import Data.Money
import Data.Maybe
projectAccountOnce :: ExchangeRates -> MEFTable -> PayoutTable -> UserAccount -> UserAccount
projectAccountOnce et mt pt u = makeUserAccount b' cs
where cs = accountContracts u
b = accountBalance u
b' = b ^+^ ptot ^-^ (fromJust $ exchangeTo et mtot BTC)
ptot = userAccountPayout pt u
mtot = userAccountMEF mt u
projectAccount :: Int -> ExchangeRates -> MEFTable -> PayoutTable -> UserAccount -> UserAccount
projectAccount n et mt pt u = iterate (projectAccountOnce et mt pt) u !! n
projectAccountExchangeTo :: (CurrencySymbol a) => a -> Int -> ExchangeRates -> MEFTable -> PayoutTable -> UserAccount -> Maybe (Money a)
projectAccountExchangeTo sy n et mt pt u = exchangeTo et b sy
where b = accountBalance $ projectAccount n et mt pt u
projectAccountUSD = projectAccountExchangeTo USD
projectAccountBTC = projectAccountExchangeTo BTC
projectAccountRUB = projectAccountExchangeTo RUB