module Hope.CreateDB (createDBMain) where

import Hope.Module

import Database.HaskellDB.PrimQuery
import Database.HaskellDB.Database (Database, createTable)
import Database.HaskellDB.DBSpec as DBSpec
import Database.HaskellDB.Sql
import Database.HaskellDB.Sql.Default
import Database.HaskellDB.Sql.Generate
import Database.HaskellDB.Sql.Print

import System.Environment


createAllTables :: Database -> [TInfo] -> IO ()
createAllTables db = mapM_ (\t -> createTable db (tname t) (tInfoCols t))

-- FIXME: hack, this should get the generator for the current database
toCreateTable :: TableName -> [(Attribute,FieldDesc)] -> SqlCreate
toCreateTable = sqlCreateTable defaultSqlGenerator

createTableSQL :: TInfo -> String
createTableSQL t = show $ ppCreate $ toCreateTable (tname t) $ tInfoCols t

tInfoCols :: TInfo -> [(String,FieldDesc)] 
tInfoCols t = [(cname c, descr c) | c <- DBSpec.cols t]


createDBMain :: Config -> Database -> IO ()
createDBMain config db = 
    do let ms = configModules config
           ts = concatMap moduleTables ms
       args <- getArgs
       if "-sql" `elem` args
         then mapM_ (putStrLn . (++";") . createTableSQL) ts
         else createAllTables db ts