module Model.Payer.Income
  ( incomeDefinedForAll
  ) where

import Data.Time.Clock (UTCTime)
import Data.List (sort)
import Data.Maybe

import Database.Persist

import Model.Database
import Model.User (getUsers)
import Model.Income (getFirstIncome)

incomeDefinedForAll :: Persist (Maybe UTCTime)
incomeDefinedForAll = do
  userIds <- map entityKey <$> getUsers
  firstIncomes <- mapM getFirstIncome userIds
  return $
    if all isJust firstIncomes
      then listToMaybe . reverse . sort . map incomeCreation . catMaybes $ firstIncomes
      else Nothing