module Network.Lastfm.API.User
  ( getArtistTracks, getBannedTracks, getEvents, getFriends, getInfo, getLovedTracks
  , getNeighbours, getNewReleases, getPastEvents, getPersonalTags, getPlaylists, getRecentStations
  , getRecentTracks, getRecommendedArtists, getRecommendedEvents, getShouts, getTopAlbums
  , getTopArtists, getTopTags, getTopTracks, getWeeklyAlbumChart, getWeeklyArtistChart
  , getWeeklyChartList, getWeeklyTrackChart, shout
  ) where

import Network.Lastfm

getArtistTracks  ResponseType  User  Artist  Maybe StartTimestamp  Maybe EndTimestamp  Maybe Page  APIKey  Lastfm Response
getArtistTracks t user artist startTimestamp endTimestamp page apiKey = callAPI t
  [ (#) (Method "user.getArtistTracks")
  , (#) user
  , (#) artist
  , (#) startTimestamp
  , (#) page
  , (#) endTimestamp
  , (#) apiKey
  ]

getBannedTracks  ResponseType  User  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getBannedTracks t user page limit apiKey = callAPI t
  [ (#) (Method "user.getBannedTracks")
  , (#) user
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getEvents  ResponseType  User  Maybe Page  Maybe Limit  Maybe FestivalsOnly  APIKey  Lastfm Response
getEvents t user page limit festivalsOnly apiKey = callAPI t
  [ (#) (Method "user.getEvents")
  , (#) user
  , (#) page
  , (#) limit
  , (#) festivalsOnly
  , (#) apiKey
  ]

getFriends  ResponseType  User  Maybe RecentTracks  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getFriends t user recentTracks page limit apiKey = callAPI t
  [ (#) (Method "user.getFriends")
  , (#) user
  , (#) recentTracks
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getInfo  ResponseType  Maybe User  APIKey  Lastfm Response
getInfo t user apiKey = callAPI t
  [ (#) (Method "user.getInfo")
  , (#) user
  , (#) apiKey
  ]

getLovedTracks  ResponseType  User  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getLovedTracks t user page limit apiKey = callAPI t
  [ (#) (Method "user.getLovedTracks")
  , (#) user
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getNeighbours  ResponseType  User  Maybe Limit  APIKey  Lastfm Response
getNeighbours t user limit apiKey = callAPI t
  [ (#) (Method "user.getNeighbours")
  , (#) user
  , (#) limit
  , (#) apiKey
  ]

getNewReleases  ResponseType  User  Maybe UseRecs  APIKey  Lastfm Response
getNewReleases t user useRecs apiKey = callAPI t
  [ (#) (Method "user.getNewReleases")
  , (#) user
  , (#) useRecs
  , (#) apiKey
  ]

getPastEvents  ResponseType  User  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getPastEvents t user page limit apiKey = callAPI t
  [ (#) (Method "user.getPastEvents")
  , (#) user
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getPersonalTags  ResponseType
                 User
                 Tag
                 TaggingType
                 Maybe Page
                 Maybe Limit
                 APIKey
                 Lastfm Response
getPersonalTags t user tag taggingType page limit apiKey = callAPI t
  [ (#) (Method "user.getPersonalTags")
  , (#) user
  , (#) tag
  , (#) taggingType
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getPlaylists  ResponseType  User  APIKey  Lastfm Response
getPlaylists t user apiKey = callAPI t
  [ (#) (Method "user.getPlaylists")
  , (#) user
  , (#) apiKey
  ]

getRecentStations  ResponseType  User  Maybe Page  Maybe Limit  APIKey  SessionKey  Secret  Lastfm Response
getRecentStations t user page limit apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "user.getRecentStations")
  , (#) user
  , (#) page
  , (#) limit
  , (#) apiKey
  , (#) sessionKey
  ]

getRecentTracks  ResponseType  User  Maybe Page  Maybe Limit  Maybe From  Maybe To  APIKey  Lastfm Response
getRecentTracks t user page limit from to apiKey = callAPI t
  [ (#) (Method "user.getRecentTracks")
  , (#) user
  , (#) page
  , (#) limit
  , (#) from
  , (#) to
  , (#) apiKey
  ]

getRecommendedArtists  ResponseType  Maybe Page  Maybe Limit  APIKey  SessionKey  Secret  Lastfm Response
getRecommendedArtists t page limit apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "user.getRecommendedArtists")
  , (#) page
  , (#) limit
  , (#) apiKey
  , (#) sessionKey
  ]

getRecommendedEvents  ResponseType  Maybe Page  Maybe Limit  APIKey  SessionKey  Secret  Lastfm Response
getRecommendedEvents t page limit apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "user.getRecommendedEvents")
  , (#) page
  , (#) limit
  , (#) apiKey
  , (#) sessionKey
  ]

getShouts  ResponseType  User  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getShouts t user page limit apiKey = callAPI t
  [ (#) (Method "user.getShouts")
  , (#) user
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getTopAlbums  ResponseType  User  Maybe Period  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getTopAlbums t user period page limit apiKey = callAPI t
  [ (#) (Method "user.getTopAlbums")
  , (#) user
  , (#) period
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getTopArtists  ResponseType  User  Maybe Period  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getTopArtists t user period page limit apiKey = callAPI t
  [ (#) (Method "user.getTopArtists")
  , (#) user
  , (#) period
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getTopTags  ResponseType  User  Maybe Limit  APIKey  Lastfm Response
getTopTags t user limit apiKey = callAPI t
  [ (#) (Method "user.getTopTags")
  , (#) user
  , (#) limit
  , (#) apiKey
  ]

getTopTracks  ResponseType  User  Maybe Period  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getTopTracks t user period page limit apiKey = callAPI t
  [ (#) (Method "user.getTopTracks")
  , (#) user
  , (#) period
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

getWeeklyAlbumChart  ResponseType  User  Maybe From  Maybe To  APIKey  Lastfm Response
getWeeklyAlbumChart t user from to apiKey = callAPI t
  [ (#) (Method "user.getWeeklyAlbumChart")
  , (#) user
  , (#) from
  , (#) to
  , (#) apiKey
  ]

getWeeklyArtistChart  ResponseType  User  Maybe From  Maybe To  APIKey  Lastfm Response
getWeeklyArtistChart t user from to apiKey = callAPI t
  [ (#) (Method "user.getWeeklyArtistChart")
  , (#) user
  , (#) from
  , (#) to
  , (#) apiKey
  ]

getWeeklyChartList  ResponseType  User  APIKey  Lastfm Response
getWeeklyChartList t user apiKey = callAPI t
  [ (#) (Method "user.getWeeklyChartList")
  , (#) user
  , (#) apiKey
  ]

getWeeklyTrackChart  ResponseType  User  Maybe From  Maybe To  APIKey  Lastfm Response
getWeeklyTrackChart t user from to apiKey = callAPI t
  [ (#) (Method "user.getWeeklyTrackChart")
  , (#) user
  , (#) from
  , (#) to
  , (#) apiKey
  ]

shout  ResponseType  User  Message  APIKey  SessionKey  Secret  Lastfm Response
shout t user message apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "user.shout")
  , (#) user
  , (#) message
  , (#) apiKey
  , (#) sessionKey
  ]