module Buffet.Parse.ParseHealthCheck
  ( get
  ) where

import qualified Data.Maybe as Maybe
import qualified Data.Text as T
import qualified Language.Docker as Docker
import qualified Language.Docker.Syntax as Syntax
import Prelude (Maybe(Just, Nothing), ($), (.), reverse)

get :: Docker.Dockerfile -> Maybe T.Text
get stage =
  case lastHealthcheck stage of
    Just (Docker.Check checkArguments) ->
      Just . reviveCommandStyle . argumentsText $
      Docker.checkCommand checkArguments
    _ -> Nothing

reviveCommandStyle :: T.Text -> T.Text
reviveCommandStyle = reviveLineBreaks
  where
    reviveLineBreaks = T.replace (T.pack "   ") $ T.pack " \\\n  "

lastHealthcheck :: Docker.Dockerfile -> Maybe (Docker.Check T.Text)
lastHealthcheck = Maybe.listToMaybe . reverse . Maybe.mapMaybe maybeHealthcheck
  where
    maybeHealthcheck (Docker.InstructionPos (Docker.Healthcheck check) _ _) =
      Just check
    maybeHealthcheck _ = Nothing

argumentsText :: Docker.Arguments T.Text -> T.Text
argumentsText (Syntax.ArgumentsText text) = text
argumentsText (Syntax.ArgumentsList list) = list