module Network.API.GoogleDictionary.Internal where

import           Control.Applicative
import           Data.Char                  (chr)
import           Data.List                  (dropWhileEnd)
import           Network.HTTP               (getRequest, getResponseBody, simpleHTTP)
import           Numeric                    (readHex)

getJson :: String -> IO String
getJson url = simpleHTTP (getRequest url) >>= getResponseBody

decodeHex :: String -> Maybe String
decodeHex ('\\':'x':x:y:ys) =
    case readHex [x,y] of
        [(n,"")] -> fmap (chr n :) (decodeHex ys)
        _ -> Nothing
decodeHex (x:xs) = fmap (x:) (decodeHex xs)
decodeHex [] = Just []

-- | Write response json to the specified file for inspection.
writeResponseDebug :: String -> FilePath -> IO ()
writeResponseDebug word path = do
    let url = "http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=" ++ word
    contents <- dropWhileEnd (/= '}') . drop 2 <$> getJson url
    writeFile path contents