module Graphics.Gnuplot.Private.Command where

import qualified Graphics.Gnuplot.Private.File as File
import qualified Graphics.Gnuplot.Execute as Exec
import System.Exit (ExitCode(ExitSuccess), )
import Control.Concurrent (forkIO, )

import System.IO.Temp (withSystemTempDirectory, )

import Control.DeepSeq (deepseq, )
import Control.Functor.HT (void, )


run ::
   (File.C file) =>
   (FilePath -> ([String], [file])) -> IO ExitCode
run render =
   withSystemTempDirectory "gnuplot" $ \dir ->
   case render dir of
      (cmds, files) -> deepseq cmds $ do
         mapM_ File.write files
         Exec.simple (cmds ++ ["pause mouse close"]) []

asyncIfInteractive :: Bool -> IO ExitCode -> IO ExitCode
asyncIfInteractive interactive act =
   if interactive
     then fmap (const ExitSuccess) $ forkIO $ void act
     else act