///////////////////////////////////////////////////////////////////////////////
//
//  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.
//  All Rights Reserved.
//
//  Contributors:
//      Kona Blend, kona8lend@@gmail.com
//
///////////////////////////////////////////////////////////////////////////////

/* This is an example of iTMF Tags convenience API.
 * WARNING: this program will change/destroy many tags in an mp4 file.
 */

#include <mp4v2/mp4v2.h>

int main( int argc, char** argv )
{
    if( argc != 2 ) {
        printf( "usage: %s file.mp4\n", argv[0] );
        return 1;
    }

    /* open file for modification */
    MP4FileHandle file = MP4Modify( argv[1], MP4_DETAILS_ERROR, 0 );
    if( file == MP4_INVALID_FILE_HANDLE ) {
        printf( "MP4Modify failed\n" );
        return 1;
    }

    /* allocate */
    const MP4Tags* tags = MP4TagsAlloc();

    /* fetch data from MP4 file and populate structure */
    MP4TagsFetch( tags, file );

    /***************************************************************************
     * print various tag values
     */

    if( tags->name )
        printf( "name: %s\n", tags->name );

    if( tags->artist )
        printf( "artist: %s\n", tags->artist );

    if( tags->albumArtist )
        printf( "albumArtist: %s\n", tags->albumArtist );

    if( tags->album )
        printf( "album: %s\n", tags->album );

    if( tags->grouping )
        printf( "grouping: %s\n", tags->grouping );

    if( tags->composer )
        printf( "composer: %s\n", tags->composer );

    if( tags->comments )
        printf( "comments: %s\n", tags->comments );

    if( tags->genre )
        printf( "genre: %s\n", tags->genre );

    if( tags->genreType )
        printf( "genreType: %u\n", *tags->genreType );

    if( tags->releaseDate )
        printf( "releaseDate: %s\n", tags->releaseDate );

    if( tags->track )
        printf( "track: index=%u total=%u\n", tags->track->index, tags->track->total );

    if( tags->disk )
        printf( "disk: index=%u total=%u\n", tags->disk->index, tags->disk->total );

    if( tags->tempo )
        printf( "tempo: %u\n", *tags->tempo );

    if( tags->compilation )
        printf( "compilation: %u\n", *tags->compilation );

    if( tags->tvShow )
        printf( "tvShow: %s\n", tags->tvShow );

    if( tags->tvNetwork )
        printf( "tvNetwork: %s\n", tags->tvNetwork );

    if( tags->tvEpisodeID )
        printf( "tvEpisodeID: %s\n", tags->tvEpisodeID );

    if( tags->tvSeason )
        printf( "tvSeason: %u\n", *tags->tvSeason );

    if( tags->tvEpisode )
        printf( "tvEpisode: %u\n", *tags->tvEpisode );

    if( tags->description )
        printf( "description: %s\n", tags->description );

    if( tags->longDescription )
        printf( "longDescription: %s\n", tags->longDescription );

    if( tags->lyrics )
        printf( "lyrics: %s\n", tags->lyrics );

    if( tags->sortName )
        printf( "sortName: %s\n", tags->sortName );

    if( tags->sortArtist )
        printf( "sortArtist: %s\n", tags->sortArtist );

    if( tags->sortAlbumArtist )
        printf( "sortAlbumArtist: %s\n", tags->sortAlbumArtist );

    if( tags->sortAlbum )
        printf( "sortAlbum: %s\n", tags->sortAlbum );

    if( tags->sortComposer )
        printf( "sortComposer: %s\n", tags->sortComposer );

    if( tags->sortTVShow )
        printf( "sortTVShow: %s\n", tags->sortTVShow );

    if( tags->artworkCount ) {
        const MP4TagArtwork* art = tags->artwork; /* artwork != NULL when artworkCount > 0 */
        uint32_t i;
        for( i = 0; i < tags->artworkCount; i++, art++ )
            printf( "art[%d]: type=%d size=%u data=%p\n", i, art->type, art->size, art->data );
    }

    if( tags->copyright )
        printf( "copyright: %s\n", tags->copyright );

    if( tags->encodingTool )
        printf( "encodingTool: %s\n", tags->encodingTool );

    if( tags->encodedBy )
        printf( "encodedBy: %s\n", tags->encodedBy );

    if( tags->purchaseDate )
        printf( "purchaseDate: %s\n", tags->purchaseDate );

    if( tags->podcast )
        printf( "podcast: %u\n", *tags->podcast );

    if( tags->keywords )
        printf( "keywords: %s\n", tags->keywords );

    if( tags->category )
        printf( "category: %s\n", tags->category );

    if( tags->hdVideo )
        printf( "hdVideo: %u\n", *tags->hdVideo );

    if( tags->mediaType )
        printf( "mediaType: %u\n", *tags->mediaType );

    if( tags->contentRating )
        printf( "contentRating: %u\n", *tags->contentRating );

    if( tags->gapless )
        printf( "gapless: %u\n", *tags->gapless );

    if( tags->contentID )
        printf( "contentID: %u\n", *tags->contentID );

    if( tags->artistID )
        printf( "artistID: %u\n", *tags->artistID );

    if( tags->playlistID )
        printf( "playlistID: %llu\n", *tags->playlistID );

    if( tags->genreID )
        printf( "genreID: %u\n", *tags->genreID );

    if( tags->xid )
        printf( "xid: %s\n", tags->xid );

    if( tags->iTunesAccount )
        printf( "iTunesAccount: %s\n", tags->iTunesAccount );

    if( tags->iTunesAccountType )
        printf( "iTunesAccountType: %u\n", *tags->iTunesAccountType );

    if( tags->iTunesCountry )
        printf( "iTunesCountry: %u\n", *tags->iTunesCountry );

    /**************************************************************************
     * modify various tags values
     */

    uint8_t  n8;
    uint16_t n16;
    uint32_t n32;
    uint64_t n64;

    MP4TagTrack dtrack;
    dtrack.index = 1;
    dtrack.total = 1;

    MP4TagDisk ddisk;
    ddisk.index = 1;
    ddisk.total = 1;

    MP4TagsSetName              ( tags, "my name" );
    MP4TagsSetArtist            ( tags, "my artist" );
    MP4TagsSetAlbumArtist       ( tags, "my albumArtist" );
    MP4TagsSetAlbum             ( tags, "my album" );
    MP4TagsSetGrouping          ( tags, "my grouping" );
    MP4TagsSetComposer          ( tags, "my composer" );
    MP4TagsSetComments          ( tags, "my comments" );
    MP4TagsSetGenre             ( tags, "my genre" );
    n16 = 5; /* disco */
    MP4TagsSetGenreType         ( tags, &n16 );
    MP4TagsSetReleaseDate       ( tags, "my releaseDate" );
    MP4TagsSetTrack             ( tags, &dtrack );
    MP4TagsSetDisk              ( tags, &ddisk );
    n16 = 60; /* bpm */
    MP4TagsSetTempo             ( tags, &n16 );
    n8 = 0; /* false */
    MP4TagsSetCompilation       ( tags, &n8 );

    MP4TagsSetTVShow            ( tags, "my tvShow" );
    MP4TagsSetTVNetwork         ( tags, "my tvNetwork" );
    MP4TagsSetTVEpisodeID       ( tags, "my tvEpisodeID" );
    n32 = 0;
    MP4TagsSetTVSeason          ( tags, &n32 );
    n32 = 0;
    MP4TagsSetTVEpisode         ( tags, &n32 );

    MP4TagsSetDescription       ( tags, "my description" );
    MP4TagsSetLongDescription   ( tags, "my longDescription" );
    MP4TagsSetLyrics            ( tags, "my lyrics" );

    MP4TagsSetSortName          ( tags, "my sortName" );
    MP4TagsSetSortArtist        ( tags, "my sortArtist" );
    MP4TagsSetSortAlbumArtist   ( tags, "my sortAlbumArtist" );
    MP4TagsSetSortAlbum         ( tags, "my sortAlbum" );
    MP4TagsSetSortComposer      ( tags, "my sortComposer" );
    MP4TagsSetSortTVShow        ( tags, "my sortTVShow" );

    MP4TagsSetCopyright         ( tags, "my copyright" );
    MP4TagsSetEncodingTool      ( tags, "my encodingTool" );
    MP4TagsSetEncodedBy         ( tags, "my encodedBy" );
    MP4TagsSetPurchaseDate      ( tags, "my purchaseDate" );

    n8 = 0; /* false */
    MP4TagsSetPodcast           ( tags, &n8 );
    MP4TagsSetKeywords          ( tags, "my keywords" );
    MP4TagsSetCategory          ( tags, "my category" );

    n8 = 0; /* false */
    MP4TagsSetHDVideo           ( tags, &n8 ); // false
    n8 = 9; /* movie */
    MP4TagsSetMediaType         ( tags, &n8 ); // movie
    n8 = 0; /* none */
    MP4TagsSetContentRating     ( tags, &n8 ); // none
    n8 = 0; /* false */
    MP4TagsSetGapless           ( tags, &n8 ); // false

    MP4TagsSetITunesAccount     ( tags, "my iTunesAccount" );
    n8 = 0; /* iTunes */
    MP4TagsSetITunesAccountType ( tags, &n8 );
    n32 = 143441; /* USA */
    MP4TagsSetITunesCountry     ( tags, &n32 );
    n32 = 0;
    MP4TagsSetContentID         ( tags, &n32 );
    n32 = 0;
    MP4TagsSetArtistID          ( tags, &n32 );
    n64 = 0;
    MP4TagsSetPlaylistID        ( tags, &n64 );
    n32 = 0;
    MP4TagsSetGenreID           ( tags, &n32 );
    n32 = 0;
    MP4TagsSetComposerID        ( tags, &n32 );
    MP4TagsSetXID               ( tags, "my prefix:my scheme:my identifier" );

    /* push data to mp4 file */
    MP4TagsStore( tags, file );

    /* free memory associated with structure and close */
    MP4TagsFree( tags );
    MP4Close( file );

    return 0;
}
