module Service.Sequencer where
import System.Random
import qualified Database.HDBC as SQL
import qualified Database.HDBC.Sqlite3 as SQL (connectSqlite3, setBusyTimeout)
import Ideas.Common.Library
import Ideas.Service.Types hiding (tUserId)
import Recognize.Data.MathStoryProblem
import Recognize.Data.Solution
import Main.Tasks
import Service.Types
import Database.Data ( StudentID, tasksDone )
sequencer :: StudentID -> IO (Maybe (Exercise a))
sequencer uid = do
conn <- SQL.connectSqlite3 "advise-me.db"
done <- tasksDone conn uid
let undone = filter (\t -> not $ showId t `elem` done) tasks
i <- randomRIO (0, length undone-1)
if null undone
then return Nothing
else case undone !! i of
Task e -> return . Just . getExercise $ e
sequencerService :: Service
sequencerService = makeService "advise-me-next-task" "Sequencer service for Advise-Me project" $
sequencer ::: tUserIdTag .-> tIO (tMaybe tExercise)