{-# LANGUAGE DeriveDataTypeable, MultiParamTypeClasses, EmptyDataDecls #-}
module Restore( Restore ) where
import CmdLib
import CmdLine
import qualified Core
import qualified Data.ByteString.Char8 as BSC

data Restore deriving (Typeable)

restorelast repodir dir = do x <- last `fmap` Core.repo repodir
                             putStrLn $ "restoring " ++ Core.path x ++ ", at "
                               ++ (BSC.unpack $ Core.hencode $ Core.root x)
                             Core.restore repodir dir (Core.root x)

instance Command Restore Flag Setup where
  synopsis    _ = "hsbackup restore [--repo <repository>] <directory>"
  description _ = "Restores a directory tree."
  options     _ = [ Group "Basic options" (accept Repo)
                  , Group "Advanced options" (accept Root) ]

  run _ setup [dir] | Just r <- root setup = Core.restore repodir dir r
                    | otherwise = restorelast repodir dir
        where repodir = repo setup
  run _ _ _ = die "Restore requires exactly 1 argument."


