/*
 * This file is part of id3v2lib library
 *
 * Copyright (c) Lars Ruiz
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

#include <assert.h>
#include <stdio.h>

#include "id3v2lib.h"
#include "test_utils.h"

#include "delete_test.h"

#define ORIGINAL_FILE "extra/file.mp3"
#define EDITED_FILE "extra/file_edited.mp3"

void delete_test_main()
{
    // Clone the file to not having to modify the original
    clone_file(ORIGINAL_FILE, EDITED_FILE);

    ID3v2_Tag* tag = ID3v2_read_tag(EDITED_FILE);

    if (tag == NULL)
    {
        tag = ID3v2_Tag_new_empty();
    }

    ID3v2_Tag_delete_frame(tag, ID3v2_ALBUM_FRAME_ID);
    ID3v2_Tag_delete_artist(tag);
    // ID3v2_Tag_delete_album(tag);
    ID3v2_Tag_delete_album_artist(tag);
    ID3v2_Tag_delete_comment_frame(tag, 0);
    // ID3v2_Tag_delete_comment(tag); // Equivalent to the above
    ID3v2_Tag_delete_composer(tag);
    ID3v2_Tag_delete_disc_number(tag);
    ID3v2_Tag_delete_genre(tag);
    ID3v2_Tag_delete_title(tag);
    ID3v2_Tag_delete_track(tag);
    ID3v2_Tag_delete_year(tag);
    // ID3v2_Tag_delete_apic_frame(tag, 0);
    ID3v2_Tag_delete_album_cover(tag); // Equivalent to the above

    ID3v2_write_tag(EDITED_FILE, tag);

    // Verify the written data
    ID3v2_Tag* edited_tag = ID3v2_read_tag(EDITED_FILE);
    assert(edited_tag != NULL);
    assert(edited_tag->header->tag_size == edited_tag->padding_size);

    assert(ID3v2_Tag_get_artist_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_album_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_title_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_track_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_album_artist_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_genre_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_year_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_disc_number_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_composer_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_comment_frame(edited_tag) == NULL);
    assert(ID3v2_Tag_get_album_cover_frame(edited_tag) == NULL);

    ID3v2_delete_tag(EDITED_FILE);
    ID3v2_Tag* deleted_tag = ID3v2_read_tag(EDITED_FILE);
    assert(deleted_tag == NULL);

    // Clean up
    remove(EDITED_FILE);

    ID3v2_Tag_free(tag);
    ID3v2_Tag_free(edited_tag);

    printf("DELETE TEST: OK\n");
}