module Unused.CLI.Search
    ( SearchRunner(..)
    , renderHeader
    , executeSearch
    ) where

import qualified Unused.CLI.ProgressIndicator as I
import qualified Unused.CLI.Util as U
import qualified Unused.CLI.Views as V
import qualified Unused.TermSearch as TS

data SearchRunner
    = SearchWithProgress
    | SearchWithoutProgress

renderHeader :: [a] -> IO ()
renderHeader terms = do
    U.resetScreen
    V.analysisHeader terms

executeSearch :: TS.SearchBackend -> SearchRunner -> [TS.SearchTerm] -> IO TS.SearchResults
executeSearch backend runner terms = do
    renderHeader terms
    runSearch backend runner terms <* U.resetScreen

runSearch :: TS.SearchBackend -> SearchRunner -> [TS.SearchTerm] -> IO TS.SearchResults
runSearch b SearchWithProgress = I.progressWithIndicator (TS.search b) I.createProgressBar
runSearch b SearchWithoutProgress = I.progressWithIndicator (TS.search b) I.createSpinner