{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TupleSections     #-}
module PullRequestFiles (filesByPullRequest, prsTouchingFile) where

import           BasicPrelude
import           Data.Text           (unpack)
import           Github.PullRequests

fromEither :: String -> Either Error a -> IO a
fromEither msgPrefix (Left e)  = fail $ msgPrefix ++ ": " ++ unpack (show e)
fromEither _         (Right a) = return a

filesByPullRequest :: String -> String -> IO [(Int, [File])]
filesByPullRequest user repo = do
  pullReqs <- fromEither "pull requests" =<< pullRequestsFor user repo
  mapM (combine . pullRequestNumber) pullReqs
  where
        combine prNum = (prNum, ) <$> (fromEither ("files for " ++ unpack (show prNum)) =<< pullRequestFiles user repo prNum)

prsTouchingFile :: String -> String -> String -> IO [Int]
prsTouchingFile file user repo = map fst . filter (any ((== file) . fileFilename) . snd) <$> filesByPullRequest user repo