///////////////////////////////////////////////////////////////////////////////
//
//  The contents of this file are subject to the Mozilla Public License
//  Version 1.1 (the "License"); you may not use this file except in
//  compliance with the License. You may obtain a copy of the License at
//  http://www.mozilla.org/MPL/
//
//  Software distributed under the License is distributed on an "AS IS"
//  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//  License for the specific language governing rights and limitations
//  under the License.
// 
//  The Original Code is MP4v2.
// 
//  The Initial Developer of the Original Code is Kona Blend.
//  Portions created by Kona Blend are Copyright (C) 2008.
//  Portions created by David Byron are Copyright (C) 2011.
//  All Rights Reserved.
//
//  Contributors:
//      Kona Blend, kona8lend@gmail.com
//      Rouven Wessling, mp4v2@rouvenwessling.de
//      David Byron, dbyron@dbyron.com
//
///////////////////////////////////////////////////////////////////////////////

#ifndef MP4V2_IMPL_ITMF_TAGS_H
#define MP4V2_IMPL_ITMF_TAGS_H

namespace mp4v2 { namespace impl { namespace itmf {

///////////////////////////////////////////////////////////////////////////////

class Tags
{
public:
    static const std::string CODE_NAME;
    static const std::string CODE_ARTIST;
    static const std::string CODE_ALBUMARTIST;
    static const std::string CODE_ALBUM;
    static const std::string CODE_GROUPING;
    static const std::string CODE_COMPOSER;
    static const std::string CODE_COMMENTS;
    static const std::string CODE_GENRE;
    static const std::string CODE_GENRETYPE;
    static const std::string CODE_RELEASEDATE;
    static const std::string CODE_TRACK;
    static const std::string CODE_DISK;
    static const std::string CODE_TEMPO;
    static const std::string CODE_COMPILATION;

    static const std::string CODE_TVSHOW;
    static const std::string CODE_TVNETWORK;
    static const std::string CODE_TVEPISODEID;
    static const std::string CODE_TVSEASON;
    static const std::string CODE_TVEPISODE;

    static const std::string CODE_DESCRIPTION;
    static const std::string CODE_LONGDESCRIPTION;
    static const std::string CODE_LYRICS;

    static const std::string CODE_SORTNAME;
    static const std::string CODE_SORTARTIST;
    static const std::string CODE_SORTALBUMARTIST;
    static const std::string CODE_SORTALBUM;
    static const std::string CODE_SORTCOMPOSER;
    static const std::string CODE_SORTTVSHOW;

    static const std::string CODE_COPYRIGHT;
    static const std::string CODE_ENCODINGTOOL;
    static const std::string CODE_ENCODEDBY;
    static const std::string CODE_PURCHASEDATE;

    static const std::string CODE_PODCAST;
    static const std::string CODE_KEYWORDS;
    static const std::string CODE_CATEGORY;

    static const std::string CODE_HDVIDEO;
    static const std::string CODE_MEDIATYPE;
    static const std::string CODE_CONTENTRATING;
    static const std::string CODE_GAPLESS;

    static const std::string CODE_ITUNESACCOUNT;
    static const std::string CODE_ITUNESACCOUNTTYPE;
    static const std::string CODE_ITUNESCOUNTRY;
    static const std::string CODE_CONTENTID;
    static const std::string CODE_ARTISTID;
    static const std::string CODE_PLAYLISTID;
    static const std::string CODE_GENREID;
    static const std::string CODE_COMPOSERID;
    static const std::string CODE_XID;

public:
    std::string      name;
    std::string      artist;
    std::string      albumArtist;
    std::string      album;
    std::string      grouping;
    std::string      composer;
    std::string      comments;
    std::string      genre;
    uint16_t    genreType;
    std::string      releaseDate;
    MP4TagTrack track;
    MP4TagDisk  disk;
    uint16_t    tempo;
    uint8_t     compilation;

    std::string   tvShow;
    std::string   tvEpisodeID;
    uint32_t tvSeason;
    uint32_t tvEpisode;
    std::string   tvNetwork;

    std::string description;
    std::string longDescription;
    std::string lyrics;

    std::string sortName;
    std::string sortArtist;
    std::string sortAlbumArtist;
    std::string sortAlbum;
    std::string sortComposer;
    std::string sortTVShow;

    CoverArtBox::ItemList artwork;

    std::string copyright;
    std::string encodingTool;
    std::string encodedBy;
    std::string purchaseDate;

    uint8_t podcast;
    std::string  keywords;
    std::string  category;

    uint8_t hdVideo;
    uint8_t mediaType;
    uint8_t contentRating;
    uint8_t gapless;

    std::string   iTunesAccount;
    uint8_t  iTunesAccountType;
    uint32_t iTunesCountry;
    uint32_t contentID;
    uint32_t artistID;
    uint64_t playlistID;
    uint32_t genreID;
    uint32_t composerID;
    std::string   xid;

    bool     hasMetadata;

public:
    Tags();
    ~Tags();

    void c_alloc ( MP4Tags*& );
    void c_fetch ( MP4Tags*&, MP4FileHandle );
    void c_store ( MP4Tags*&, MP4FileHandle );
    void c_free  ( MP4Tags*& );

    void c_addArtwork    ( MP4Tags*&, MP4TagArtwork& );
    void c_setArtwork    ( MP4Tags*&, uint32_t, MP4TagArtwork& );
    void c_removeArtwork ( MP4Tags*&, uint32_t );

    void c_setString  ( const char*, std::string&, const char*& );
    void c_setInteger ( const uint8_t*,  uint8_t&,  const uint8_t*& );
    void c_setInteger ( const uint16_t*, uint16_t&, const uint16_t*& );
    void c_setInteger ( const uint32_t*, uint32_t&, const uint32_t*& );
    void c_setInteger ( const uint64_t*, uint64_t&, const uint64_t*& );

    void c_setTrack ( const MP4TagTrack*, MP4TagTrack&, const MP4TagTrack*& );
    void c_setDisk  ( const MP4TagDisk*, MP4TagDisk&, const MP4TagDisk*& );

private:
    typedef std::map<std::string,MP4ItmfItem*> CodeItemMap;

private:
    void fetchString  ( const CodeItemMap&, const std::string&, std::string&, const char*& );
    void fetchInteger ( const CodeItemMap&, const std::string&, uint8_t&,  const uint8_t*& );
    void fetchInteger ( const CodeItemMap&, const std::string&, uint16_t&, const uint16_t*& );
    void fetchInteger ( const CodeItemMap&, const std::string&, uint32_t&, const uint32_t*& );
    void fetchInteger ( const CodeItemMap&, const std::string&, uint64_t&, const uint64_t*& );

    void fetchGenre ( const CodeItemMap&, uint16_t&, const uint16_t*& );
    void fetchTrack ( const CodeItemMap&, MP4TagTrack&, const MP4TagTrack*& );
    void fetchDisk  ( const CodeItemMap&, MP4TagDisk&, const MP4TagDisk*& );

    void storeString  ( MP4File&, const std::string&, const std::string&, const char* );
    void storeInteger ( MP4File&, const std::string&, uint8_t,  const uint8_t* );
    void storeInteger ( MP4File&, const std::string&, uint16_t, const uint16_t* );
    void storeInteger ( MP4File&, const std::string&, uint32_t, const uint32_t* );
    void storeInteger ( MP4File&, const std::string&, uint64_t, const uint64_t* );

    void storeGenre ( MP4File&, uint16_t, const uint16_t* );
    void storeTrack ( MP4File&, const MP4TagTrack&, const MP4TagTrack* );
    void storeDisk  ( MP4File&, const MP4TagDisk&, const MP4TagDisk* );

    void remove ( MP4File&, const std::string& );
    void store  ( MP4File&, const std::string&, MP4ItmfBasicType, const void*, uint32_t );

    void updateArtworkShadow( MP4Tags*& );
};

///////////////////////////////////////////////////////////////////////////////

}}} // namespace mp4v2::impl::itmf

#endif // MP4V2_IMPL_ITMF_TAGS_H
