package Distribution::Packager::Amazon;

use strict;
use Data::Dumper;
use File::Basename;

use Common::Assert;

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

sub _requireAllowed { 1 }

#sub _templateFile { 'amazon-transform.xsl' }
sub _templateFile { 'amazon.tt' }

sub _manifestFile { 'manifest.xml' }

sub _xsdFile { 'amazon-AMZ_Feed_2.2.xsd' }

sub _requireMappedGenres { 1 }

sub _worldWideTerritory { '**' }

###
#   Manifest
###

sub _manifestAlbumRoot { 'AlbumBundle' }

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

    return { DirectoryName => $album->{upc} };
}

sub _preManifest {
    my $self   = shift;
    my $albums = $self->{_manifest}->{AlbumBundle};

    $self->{_manifest} = {
        FeedId       => $self->_distributionPackageName(),
        BundleCount  => $self->_processedAlbumsCount(),
        AlbumsBundle => $albums
    };
}

###
#   Album Art
###
sub _imageFormat {
    {
        geometry => '1448x1448',
        density  => 300,
    };
}

###
#   Album Audio
###
sub _audioConverter { 'MediaServe::Audio::Converter::FLAC' }

sub _albumAudioFileName {
    shift->SUPER::_albumAudioFileName( @_, format => "%s_%02d_%03d.%s" );
}

sub _createDistributionPackageName {
    my $self   = shift;
    my $vendor = $self->{_acctInfo}->Code();
    my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime( time() );
    my $name;

    my $step = 0;

    do {
        $name = sprintf( '%s_%d.%02d.%02d.%02d.%02d', $vendor, $year + 1900, $mon + 1, $mday, $hour, $min + $step );

        $self->_processFailure( "Unable to create a delivery directory", 22 )
          if ( $step > 10 );

        $step += 1;

    } while ( $self->_isDistributionPackageUsed($name) );

    return $name;
}

1;
