module Database.Schema.Migrations.Migration
    ( Migration(..)
    , newMigration
    , emptyMigration
    )
where

import Database.Schema.Migrations.Dependencies

import Data.Time () -- for UTCTime Show instance
import qualified Data.Time.Clock as Clock

data Migration = Migration { mTimestamp :: Maybe Clock.UTCTime
                           , mId :: String
                           , mDesc :: Maybe String
                           , mApply :: String
                           , mRevert :: Maybe String
                           , mDeps :: [String]
                           }
               deriving (Eq, Show, Ord)

instance Dependable Migration where
    depsOf = mDeps
    depId = mId

emptyMigration :: String -> Migration
emptyMigration name =
  Migration { mTimestamp = Nothing
            , mId = name
            , mApply = ""
            , mRevert = Nothing
            , mDesc = Nothing
            , mDeps = []
            }

newMigration :: String -> Migration
newMigration theId = 
  (emptyMigration theId) 
    { mApply = "(Apply SQL here.)"
    , mDesc = Just "(Describe migration here.)"
    }