{-# LANGUAGE DeriveGeneric #-}

module SuperUserSpark.Deployer.Types where

import Import

import SuperUserSpark.Bake.Types
import SuperUserSpark.Check.Types
import SuperUserSpark.CoreTypes

data DeployAssignment = DeployAssignment
    { deployCardReference :: BakeCardReference
    , deploySettings :: DeploySettings
    } deriving (Show, Eq, Generic)

instance Validity DeployAssignment

data DeploySettings = DeploySettings
    { deploySetsReplaceLinks :: Bool
    , deploySetsReplaceFiles :: Bool
    , deploySetsReplaceDirectories :: Bool
    , deployCheckSettings :: CheckSettings
    } deriving (Show, Eq, Generic)

instance Validity DeploySettings

defaultDeploySettings :: DeploySettings
defaultDeploySettings =
    DeploySettings
    { deploySetsReplaceLinks = False
    , deploySetsReplaceFiles = False
    , deploySetsReplaceDirectories = False
    , deployCheckSettings = defaultCheckSettings
    }

type SparkDeployer = ExceptT DeployError (ReaderT DeploySettings IO)

data DeployError
    = DeployCheckError CheckError
    | DeployError String
    deriving (Show, Eq, Generic)

instance Validity DeployError

data PreDeployment
    = Ready FilePath
            FilePath
            DeploymentKind
    | AlreadyDone
    | Error String
    deriving (Show, Eq, Generic)

instance Validity PreDeployment