module Octane.Main (main) where

import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Octane.Core
import Octane.Type

main :: IO ()
main = do
    files <- getArgs
    contents <- mapM BS.readFile files
    results <- mapM decodeFileOrFail files
    mapM_ debug (zip3 files contents results)

debug :: (String, ByteString, Either (ByteOffset, String) Replay) -> IO ()
debug (file, contents, result) = case result of
    Left (offset, message) -> hPutStrLn stderr
        (file ++ " @ byte " ++ show offset ++ " - " ++ message)
    Right replay -> do
        let inputSize = contents & BS.length & fromIntegral
        let outputSize = replay & encode & BSL.length
        when (inputSize /= outputSize) $ do
            hPutStrLn stderr ("input size (" ++ show inputSize ++ ") not equal to output size (" ++ show outputSize ++ ")!")
        print replay