package Distribution::Packager::Myspace;

use strict;

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

use Common::Assert;

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

sub _requireVendorID { }

sub _requireAllowed { 1 }

sub _requireMappedArtistRoles { 1 }

sub _xsdFile { 'myspace-v2.xsd' }

sub _imageFormat {
    {
        geometry => '1425x1425',
        density  => 300,
    };
}

sub _audioConverter { 'MediaServe::Audio::Converter::MP3' }
sub _audioConverterOptions { { bitrate => 320 } }

sub _templateFile { 'myspace.tt' }

sub _worldWideTerritory { 'WW' }

###  Needed to add a timestamp to the album
sub _processAudio {
    my $self = shift;
    my ($album) = @_;

    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = gmtime( $self->{_timestamp} );
    $album->{timestamp} = sprintf( "%4d-%02d-%02dT%02d:%02d:%02dZ", $year + 1900, $mon + 1, $mday, $hour, $min, $sec );

    return $self->SUPER::_processAudio(@_);
}

###  Needed to create a preview file
sub _processTrack {
    my $self = shift;
    my ( $album, $volume, $track ) = @_;

    $self->_processTrackMapping( $album, $volume, $track );

    my $originalAudioPath = $self->_localOriginalAudioPath( $album, $volume, $track );
    my $resultAudioPath = $self->_localAudioFilePath( $album, $volume, $track );

    Common::Log::Debug("*** Converting Audio For Preview ***");
    Common::Log::Debug(" - AUDIO ORIG: $originalAudioPath");

    my $converter = $self->_audioConverterObject(
        filename  => $originalAudioPath,
        converter => 'MediaServe::Audio::Converter::MP3',
        options   => { bitrate => 320, start => 0, length => 30 }
    );

    my $ext = $converter->Extension();

    $resultAudioPath =~ s/\.(mp3|flac|aac|wav)/_30.$ext/i;
    Common::Log::Debug(" - AUDIO DEST: $resultAudioPath");

    # Just take a 30 second clip
    unless ( $converter->write($resultAudioPath) ) {
        $self->_processFailure( "Failed to convert audio: " . $converter->error(), 16 );
    }

    my $basePath = $self->_localBasePath();

    $track->{'audio-preview-path'} = $resultAudioPath;
    $track->{'audio-preview-path'} =~ s/$basePath\/?//;
    $track->{'audio-preview-filename'} = basename($resultAudioPath);

    $track->{'audio-preview-checksum'} = $self->_get_file_checksum($resultAudioPath);
    $track->{'audio-preview-size'}     = $self->_get_file_size($resultAudioPath);

    $track->{'audio-preview-duration'} = $self->_getFLACDuration($originalAudioPath);

    unless ( -e $resultAudioPath ) {
        print STDERR "Failed to convert audio preview: $resultAudioPath\n";
        return 0;
    }

    $self->_addToChecksum( $resultAudioPath, $track->{'audio-checksum'} );

    return $self->SUPER::_processTrack(@_);
}

1;
