module ID3.Simple
( Tag

, setArtist
, setTitle
, setAlbum
, setYear
, setTrack

, getArtist
, getTitle
, getAlbum
, getYear
, getTrack

, readTag
, writeTag

) where

import Data.Accessor
import Data.Maybe
import ID3.Type
import ID3.ReadTag
import ID3.WriteTag

type Tag = ID3Tag

getFrameText :: FrameID -> Tag -> Maybe String
getFrameText id tag = case tag^.frame id of
                           Nothing -> Nothing
                           Just fr -> Just (fr^.textContent)

setFrameText :: FrameID -> String -> Tag -> Tag
setFrameText id x tag = edit $ fromMaybe (initFrame id) (tag^.frame id)
                  where edit f = (frame id) ^= Just (updateSize $ textContent^=x $ f ) $ tag

-----------------------------------

getArtist :: Tag -> Maybe String
getArtist = getFrameText "TPE1"

setArtist :: String -> Tag -> Tag
setArtist = setFrameText "TPE1"

--artist = accessor getArtist setArtist
-----------------------------------

getTitle :: Tag -> Maybe String
getTitle = getFrameText "TIT2"

setTitle :: String -> Tag -> Tag
setTitle = setFrameText "TIT2"
-----------------------------------

getAlbum :: Tag -> Maybe String
getAlbum = getFrameText "TALB"

setAlbum :: String -> Tag -> Tag
setAlbum = setFrameText "TALB"
-----------------------------------

getYear :: Tag -> Maybe String
getYear = getFrameText "TDRC"

setYear :: String -> Tag -> Tag
setYear = setFrameText "TDRC"
-----------------------------------

getTrack :: Tag -> Maybe String
getTrack = getFrameText "TRCK"

setTrack :: String -> Tag -> Tag
setTrack = setFrameText "TRCK"
-----------------------------------
{-
get:: Tag -> Maybe String
get= getFrameText ""

set:: String -> Tag -> Tag
set= setFrameText ""
-----------------------------------
-}