{-# LANGUAGE CPP #-}
module Network.SC2.Internal.Directories where

import System.IO
import System.Directory
import System.FilePath
import qualified Data.Text as T
import qualified Data.Text.IO as T

userSC2SubDirectory :: FilePath
#ifdef mingw32_HOST_OS
userSC2SubDirectory = "Documents" </> "Starcraft II"
#else
userSC2SubDirectory = "StarcraftII"
#endif

data SC2Paths = Paths
  {
    gameExecutable :: FilePath,
    supportDir :: FilePath,
    baseDir :: FilePath

  } deriving (Show)


makeSC2Paths :: Maybe FilePath -> IO SC2Paths
makeSC2Paths (Just ex) = return (makeSC2PathsFromExecutable ex)
makeSC2Paths Nothing = do
  homeDir <- getHomeDirectory
  let configFile = homeDir </> userSC2SubDirectory </> "ExecuteInfo.txt"
  theText <- T.readFile configFile
  let contents = head . lines . T.unpack $ theText
  let exe = drop 13 contents
  return (makeSC2PathsFromExecutable exe)
makeSC2PathsFromExecutable :: FilePath -> SC2Paths
makeSC2PathsFromExecutable ex = Paths {gameExecutable = ex, supportDir = support, baseDir = base } where
  base = (takeDirectory . takeDirectory . takeDirectory)  ex
  support = base </> "Support64" -- TODO: Test for x86 vs x64