module Main ( main ) where import Data.Text (StrictText) import Data.Vector (Vector) import qualified Data.Text as Text import Text.URI (URI, mkURI) import qualified Data.Vector as Vector import qualified Data.Text.IO as Text.IO import qualified Data.Text.Lazy.IO as Text.Lazy.IO import qualified Data.Text.Lazy.Builder as Text.Builder import qualified Data.Text.Lazy.Builder.Int as Text.Builder import GHC.Records (HasField(..)) import TeaCleaner.Filter (filterByActivities, filterByUserProperties) import TeaCleaner.Client (User(..), getUsers, purgeUser) import TeaCleaner.CommandLine (ProgramOptions(..), commandLineInfo, execParser) printUsers :: URI -> StrictText -> Bool -> Vector User -> IO () printUsers server token liveRun users = printCount >> Vector.forM_ users (printUser liveRun) where printCount = let count = Text.Builder.decimal $ Vector.length users in Text.Lazy.IO.putStrLn $ Text.Builder.toLazyText $ "Count: " <> count buildValue user = getField @"username" user <> "\n" <> " Website: " <> getField @"website" user <> "\n" <> " Created: " <> Text.pack (show $ getField @"created" user) <> "\n" <> " Last login: " <> Text.pack (show $ getField @"lastLogin" user) <> "\n" <> " Email: " <> getField @"email" user <> "\n" <> " Website: " <> getField @"website" user <> "\n" <> " Description: " <> getField @"description" user <> "\n" <> " Avatar: " <> getField @"avatarUrl" user <> "\n" <> "\n" printUser True user = Text.IO.putStrLn (buildValue user) >> purgeUser server token user printUser False user = Text.IO.putStrLn (buildValue user) main :: IO () main = execParser commandLineInfo >>= withArguments where withArguments ProgramOptions{..} = mkURI server >>= withServer liveRun token withServer liveRun token server = getUsers server token >>= Vector.filterM (filterByActivities server token) . Vector.filter filterByUserProperties >>= printUsers server token liveRun