module System.Directory.Recursive
    (
      getDirectoryContentsRecursive
    , isHaskellSource
    , pretty
    , putDoc
    , module System.Directory.Tree
    )
  where

import           Debug.Trace
import           System.Directory
import           System.Directory.Tree
import           System.FilePath
import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))
import qualified Text.PrettyPrint.ANSI.Leijen ((<$>))
-- import           Text.PrettyPrint.HughesPJClass

(<++>) = (Text.PrettyPrint.ANSI.Leijen.<$>)

getDirectoryContentsRecursive
  :: FilePath -> IO (AnchoredDirTree ())
getDirectoryContentsRecursive = readDirectoryWith (const $ return ())

instance Pretty (DirTree a) where
    pretty (Dir dn ds) = cyan (text dn) <$$>
        vcat (map (hang 2 . (text (replicate 2 ' ') <>) . pretty) ds)
    pretty (File fn _) = white (text fn) <> red (text " <-")
    pretty (Failed fn e) = red (text fn <> text (show e))

isHaskellSource (File fn _) =
    takeExtension fn == ".hs"
isHaskellSource (Dir _ []) = False
isHaskellSource (Dir ".stack-work" _) = False
isHaskellSource (Dir _ ds) = -- traceShow (ds, any isHaskellSource ds) $
    any isHaskellSource ds
isHaskellSource _ = False

recursiveLink = undefined

recursiveMirror = undefined