package Distribution::Packager::TrackItDown;

use strict;

use Common::Assert;

use lib '/app/tools/distribution/lib';
use base 'Distribution::PackagerNew';

sub _templateFile { 'generic_v2.tt' }

sub _manifestFile { 'manifest' }

sub _serviceGenreRestricted { 1 }

sub _worldWideTerritory { 'WW' }

sub _imageFormat {
    {
        geometry => '1000x1000',
        density  => 300,
    };
}

sub _audioConverter { 'MediaServe::Audio::Converter::Wav' }

sub _albumManifest {
    my $self  = shift;
    my $album = shift;

    return {
        LabelName     => $album->{label},
        ReleaseName   => $album->{title},
        Artist        => $album->{'display-artist'},
        CatalogNumber => $album->{'catalog-number'},
        ReleaseDate   => $album->{'release-date'},
    };
}

sub _manifest {
    my $self = shift;

    my $destFile = $self->_localManifestPath();
    my $output;

    assert($destFile);

    Common::Log::Debug("*** Processing manifest ***");
    Common::Log::Debug(" - Manifest file: $destFile");

    unless ( $self->_processedAlbumsCount() ) {
        Common::Log::Debug(" - No albums processed, not creating manifest");
        return 1;
    }

    if ( $self->{_manifest} ) {
        $output .= sprintf( "%s\t%s\t%s\t%s\t%s\n", 'Cat#', 'Title', 'Artist', 'Label', 'Release Date' );

        foreach my $record ( @{ $self->{_manifest}->{Album} } ) {
            $output .= sprintf(
                "%s\t%s\t%s\t%s\t%s\n",
                $record->{CatalogNumber},
                $record->{Title}, $record->{Artist}, $record->{LabelName}, $record->{ReleaseDate}
            );
        }
        $self->_writeFile( $self->_localManifestPath(), $output );
    } else {
        Common::Log::Print("WARNING: No manifest data found");
    }

    return 1;
}
1;
