--------------------------------------------------------------------
-- |
-- Module      : FriendFeed.User
-- Description : Fetch user-specific FriendFeed info.
-- Copyright   : (c) Sigbjorn Finne, 2008
-- License     : BSD3
--
-- Maintainer: Sigbjorn Finne <sof@forkIO.com>
-- Stability : provisional
-- Portability: portable
--
-- Actions for fetching entries,comments etc. for one or
-- more users\/friends.
-- 
--------------------------------------------------------------------
module FriendFeed.User where

import FriendFeed.Types
import FriendFeed.Types.Import ()
import FriendFeed.Monad

import Data.List ( intercalate )

-- | Returns list of all of the user's subscriptions
-- (people) and services connected to their account
-- (Authentication required for private users): 
getUserProfile :: UserName -> FFm User
getUserProfile uname = authCall $
  ffeedTranslate $
   ffeedCall ["user",uname,"profile"] []

-- | Get a user's profile picture.
getUserPicture :: UserName -> String -> FFm URLString
getUserPicture uname sz = withBase ffeed_base $
  ffeedTranslate $
   ffeedCall [uname,"picture"]
             [("size",sz)]

-- | Returns the most recent public entries on FriendFeed.
getPublicEntries :: FFm [Entry]
getPublicEntries = authCall $
  ffeedTranslateLs "entries" $
   ffeedCall ["feed", "public"] []

getUserEntries :: UserName -> FFm [Entry]
getUserEntries u = authCall $ 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user",u] []

getUserComments :: UserName -> FFm [Entry]
getUserComments u = authCall $ 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user",u, "comments"] []

getUserLikes :: UserName -> FFm [Entry]
getUserLikes u = authCall $ 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user",u, "likes"] []

-- | Returns the most recent entries the user has commented 
-- on or "liked".
getUserDiscussion :: UserName -> FFm [Entry]
getUserDiscussion u = authCall $ 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user",u, "discussion"] []

-- | Returns entries from a user's friends.
getFriendEntries :: UserName -> FFm [Entry]
getFriendEntries u = authCall $ 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user",u, "friends"] []

-- | Returns the most recent entries from a list of users, 
-- specified by nickname.
getUsersEntries :: [UserName] -> FFm [Entry]
getUsersEntries us = 
  ffeedTranslateLs "entries" $
   ffeedCall ["feed","user"] 
             [("nickname", intercalate "," us)]

-- | Validates the user's remote key. If the HTTP Basic 
-- Authentication nickname and remote key are valid, we 
-- return a HTTP 200 status code. Otherwise, we return an 
-- HTTP 401 status code. 
validateUserKey :: FFm Bool
validateUserKey = onSuccess $ authCall $ 
  ffeedCall_ ["validate"] []