module Database.Persist.Relational.Config
    ( NameConfig(..)
    , defaultNameConfig
    ) where

import Data.Char

data NameConfig = NameConfig
    { tableVarNameFromTableTypeName :: String -> String
    , insertVarNameFromTableTypeName :: String -> String
    , insertQueryVarNameFromTableTypeName :: String -> String
    , columnNameToLabelName :: String -> String
    }

defaultNameConfig :: NameConfig
defaultNameConfig = NameConfig
    { tableVarNameFromTableTypeName = toLowerCamel . (++ "_table")
    , insertVarNameFromTableTypeName = toLowerCamel . ("insert_" ++)
    , insertQueryVarNameFromTableTypeName = toLowerCamel . ("insertQuery_" ++)
    , columnNameToLabelName = toLowerCamel
    }

toLowerCamel :: String -> String
toLowerCamel [] = []
toLowerCamel (x:xs) = toLower x : go xs
  where
    go [] = []
    go ('_':c:cs) = toUpper c : go cs
    go (c:cs) = c : go cs