module Buffet.Assemble.AssembleInternal
  ( get
  ) where

import qualified Buffet.Assemble.BeforeFirstBuildStage as BeforeFirstBuildStage
import qualified Buffet.Assemble.GlobalBuildStage as GlobalBuildStage
import qualified Buffet.Assemble.LocalBuildStages as LocalBuildStages
import qualified Buffet.Ir.Ir as Ir
import qualified Buffet.Toolbox.DockerTools as DockerTools
import qualified Buffet.Toolbox.TextTools as TextTools
import qualified Data.Text as T
import Prelude (($), (.), fmap, mconcat)

get :: Ir.Buffet -> T.Text
get :: Buffet -> Text
get Buffet
buffet =
  [DockerfilePart] -> Text
printDockerfileParts ([DockerfilePart] -> Text) -> [DockerfilePart] -> Text
forall a b. (a -> b) -> a -> b
$
  [[DockerfilePart]] -> [DockerfilePart]
forall a. Monoid a => [a] -> a
mconcat
    [ Buffet -> [DockerfilePart]
BeforeFirstBuildStage.get Buffet
buffet
    , Buffet -> [DockerfilePart]
LocalBuildStages.get Buffet
buffet
    , Buffet -> [DockerfilePart]
GlobalBuildStage.get Buffet
buffet
    ]

printDockerfileParts :: [Ir.DockerfilePart] -> T.Text
printDockerfileParts :: [DockerfilePart] -> Text
printDockerfileParts = [Text] -> Text
TextTools.intercalateNewline ([Text] -> Text)
-> ([DockerfilePart] -> [Text]) -> [DockerfilePart] -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (DockerfilePart -> Text) -> [DockerfilePart] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap DockerfilePart -> Text
printInstructions

printInstructions :: Ir.DockerfilePart -> T.Text
printInstructions :: DockerfilePart -> Text
printInstructions = [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat ([Text] -> Text)
-> (DockerfilePart -> [Text]) -> DockerfilePart -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Instruction Text -> Text) -> DockerfilePart -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Instruction Text -> Text
DockerTools.printInstruction