module Network.Lastfm.API.Library
  ( addAlbum, addArtist, addTrack, getAlbums, getArtists, getTracks
  , removeAlbum, removeArtist, removeScrobble, removeTrack
  ) where

import Network.Lastfm

addAlbum  ResponseType  Artist  Album  APIKey  SessionKey  Secret  Lastfm Response
addAlbum t artist album apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.addAlbum")
  , (#) artist
  , (#) album
  , (#) apiKey
  , (#) sessionKey
  ]

addArtist  ResponseType  Artist  APIKey  SessionKey  Secret  Lastfm Response
addArtist t artist apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.addArtist")
  , (#) artist
  , (#) apiKey
  , (#) sessionKey
  ]

addTrack  ResponseType  Artist  Track  APIKey  SessionKey  Secret  Lastfm Response
addTrack t artist track apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.addTrack")
  , (#) artist
  , (#) track
  , (#) apiKey
  , (#) sessionKey
  ]

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

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

getTracks  ResponseType  User  Maybe Artist  Maybe Album  Maybe Page  Maybe Limit  APIKey  Lastfm Response
getTracks t user artist album page limit apiKey = callAPI t
  [ (#) (Method "library.getTracks")
  , (#) user
  , (#) artist
  , (#) album
  , (#) page
  , (#) limit
  , (#) apiKey
  ]

removeAlbum  ResponseType  Artist  Album  APIKey  SessionKey  Secret  Lastfm Response
removeAlbum t artist album apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.removeAlbum")
  , (#) artist
  , (#) album
  , (#) apiKey
  , (#) sessionKey
  ]

removeArtist  ResponseType  Artist  APIKey  SessionKey  Secret  Lastfm Response
removeArtist t artist apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.removeArtist")
  , (#) artist
  , (#) apiKey
  , (#) sessionKey
  ]

removeScrobble  ResponseType  Artist  Track  Timestamp  APIKey  SessionKey  Secret  Lastfm Response
removeScrobble t artist track timestamp apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.removeScrobble")
  , (#) artist
  , (#) track
  , (#) timestamp
  , (#) apiKey
  , (#) sessionKey
  ]

removeTrack  ResponseType  Artist  Track  APIKey  SessionKey  Secret  Lastfm Response
removeTrack t artist track apiKey sessionKey secret = callAPIsigned t secret
  [ (#) (Method "library.removeTrack")
  , (#) artist
  , (#) track
  , (#) apiKey
  , (#) sessionKey
  ]