{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Lastfm event API
--
-- This module is intended to be imported qualified:
--
-- @
-- import qualified Network.Lastfm.Event as Event
-- @
module Network.Lastfm.Event
  ( attend, getAttendees, getInfo, getShouts, share, shout
  ) where

import Control.Applicative

import Network.Lastfm.Request


-- | Set a user's attendance status for an event.
--
-- <http://www.last.fm/api/show/event.attend>
attend :: Request f (Event -> Status -> APIKey -> SessionKey -> Sign)
attend = api "event.attend" <* post
{-# INLINE attend #-}


-- | Get a list of attendees for an event.
--
-- Optional: 'page', 'limit'
--
-- <http://www.last.fm/api/show/event.getAttendees>
getAttendees :: Request f (Event -> APIKey -> Ready)
getAttendees = api "event.getAttendees"
{-# INLINE getAttendees #-}


-- | Get the metadata for an event on Last.fm. Includes attendance and lineup information.
--
-- <http://www.last.fm/api/show/event.getInfo>
getInfo :: Request f (Event -> APIKey -> Ready)
getInfo = api "event.getInfo"
{-# INLINE getInfo #-}


-- | Get shouts for this event. Also available as an rss feed.
--
-- Optional: 'page', 'limit'
--
-- <http://www.last.fm/api/show/event.getShouts>
getShouts :: Request f (Event -> APIKey -> Ready)
getShouts = api "event.getShouts"
{-# INLINE getShouts #-}


-- | Share an event with one or more Last.fm users or other friends.
--
-- Optional: 'public', 'message'
--
-- <http://www.last.fm/api/show/event.share>
share :: Request f (Event -> Recipient -> APIKey -> SessionKey -> Sign)
share = api "event.share" <* post
{-# INLINE share #-}


-- | Shout in this event's shoutbox
--
-- <http://www.last.fm/api/show/event.shout>
shout :: Request f (Event -> Message -> APIKey -> SessionKey -> Sign)
shout = api "event.shout" <* post
{-# INLINE shout #-}