package Distribution::Packager::Beatport;

use strict;
use Data::Dumper;

use Common::Assert;

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

#sub _xsdFile { 'beatport_content_submission_v3.01.xsd' }

sub _requireAllowed { 1 }

sub _imageFormat {
    {
        geometry => '500x500',
        density  => 72,
    };
}

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

sub _templateFile { 'beatport.tt' }

sub _worldWideTerritory { 'WW' }

sub _createDistributionPackageName {
    my $self = shift;

    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime( $self->{_timestamp} );
    return sprintf( "%s_%d%02d%02d%02d%02d%02d", $self->{_acctInfo}->Code, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
}

####
#    Overwrite default album directory name
####
sub _albumPackageName {
    my $self  = shift;
    my $album = shift;
    my $label = $album->{label};
    $label =~ s/\///g;

    my $dir = sprintf( "%s - %s - %s", $label, $album->{'catalog-number'}, $album->{'release-date'} );

    return $dir;
}

####
#    Create the manifest files
####
sub _manifestFile { 'manifest' }

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

    return {
        LabelName     => $album->{label},
        ReleaseName   => $album->{title},
        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\n", 'Cat#', 'Release Info', 'Label', 'Release Date' );

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

    return 1;
}

1;
