module Unused.TermSearch
    ( SearchResults(..)
    , SearchTerm
    , search
    ) where

import qualified Data.Maybe as M
import qualified System.Process as P
import           Unused.TermSearch.Internal (commandLineOptions, parseSearchResult)
import           Unused.TermSearch.Types (SearchResults(..))
import           Unused.Types (SearchTerm, searchTermToString)

search :: SearchTerm -> IO SearchResults
search t =
    SearchResults . M.mapMaybe (parseSearchResult t) <$> (lines <$> ag (searchTermToString t))

ag :: String -> IO String
ag t = do
  (_, results, _) <- P.readProcessWithExitCode "ag" (commandLineOptions t) ""
  return results