module Web.VKHS.API
    ( api
    )  where

import Control.Monad
import Control.Monad.Trans
import Control.Monad.Writer
import Control.Monad.Error

import Data.Label
import qualified Data.ByteString.Char8 as BS

import Network.Curlhs.Core

import Network.Protocol.Http
import Network.Protocol.Uri
import Network.Protocol.Uri.Query

import Text.Printf

import Web.VKHS.Types
import Web.VKHS.Curl

api :: Env -> AccessToken -> String -> Parameters -> IO (Either String String)
api e (at,_,_) mn mp =
    let uri = BS.pack $ showUri $ (\f -> f $ toUri $ printf "https://api.vk.com/method/%s" mn) $
                set query $ bw params (("access_token",at):mp)
    in runErrorT $ do
        r <- ErrorT $ vk_curl e (tell [CURLOPT_URL  uri])
        (_,b) <- ErrorT $ return $ parseResponse r
        return b