module Database.Redis.General
    ( RedisReply(..)
    , keyExists
    , keyDelete
    , keyType
    , keys
    , keyRandom
    , select
    , toUTF8
    , ping
    , unwrapReply
    ) where


import           System.IO

import           Database.Redis.Internal


------------------------------------------------------------------------------
-- EXISTS
keyExists :: Handle
          -> String
          -> IO (Maybe RedisReply)
keyExists h key = request h $ map toUTF8 ["EXISTS", key]


-- EXISTS for ByteString input
keyExistsB :: Handle
           -> ByteString
           -> IO (Maybe RedisReply)
keyExistsB h key = request h [toUTF8 "EXISTS", key]


------------------------------------------------------------------------------
-- DEL
-- FIXME: should handle multiple deletions
keyDelete :: Handle -> String -> IO (Maybe RedisReply)
keyDelete h key = request h $ map toUTF8 ["DEL", key]


------------------------------------------------------------------------------
-- TYPE
keyType :: Handle -> String -> IO (Maybe RedisReply)
keyType h key = request h $ map toUTF8 ["TYPE", key]


------------------------------------------------------------------------------
-- KEYS
keys :: Handle -> String -> IO (Maybe RedisReply)
keys h pattern = request h $ map toUTF8 ["KEYS", pattern]


------------------------------------------------------------------------------
-- RANDOMKEY
keyRandom :: Handle -> IO (Maybe RedisReply)
keyRandom h = request h $ map toUTF8 ["RANDOMKEY"]


-- RENAME
-- RENAMENX
-- DBSIZE
-- EXPIRE
-- PERSIST
-- TTL


------------------------------------------------------------------------------
-- SELECT
select :: Handle -> Int -> IO (Maybe RedisReply)
select h i = request h $ map toUTF8 ["SELECT", show i]


-- MOVE
-- FLUSHDB
-- FLUSHALL

------------------------------------------------------------------------------
ping :: Handle -> IO (Maybe RedisReply)
ping h = request h $ map toUTF8 ["PING"]