module Unused.Grouping.Internal
    ( groupFilter
    ) where

import Unused.Grouping.Types
import System.FilePath (takeDirectory, splitDirectories)
import Unused.Types (tmPath, tmTerm)
import Data.List (intercalate)

groupFilter :: CurrentGrouping -> GroupFilter
groupFilter GroupByDirectory = fileNameGrouping
groupFilter GroupByTerm = termGrouping
groupFilter GroupByFile = fileGrouping
groupFilter NoGroup = const NoGrouping

fileNameGrouping :: GroupFilter
fileNameGrouping = ByDirectory . shortenedDirectory . tmPath

termGrouping :: GroupFilter
termGrouping = ByTerm . tmTerm

fileGrouping :: GroupFilter
fileGrouping = ByFile . tmPath

shortenedDirectory :: String -> String
shortenedDirectory =
    intercalate "/" . take 2 . splitDirectories . takeDirectory