#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Distribution::Export::Metadata;
use strict;
use warnings;

use File::Copy;
use Data::Dumper;

use lib '/app/tools/common/lib';
use Common::RSApp;
use Common::Util;
use Common::Assert;
use Common::WriteXML;

use lib '/app/tools/common/lib';
use Common::XMLWriter;

use lib '/app/tools/distribution/lib';
use Distribution::Metadata::Album;
use Distribution::Util;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::Album;

use base 'Common::Script';

use constant kImportTransform => '/app/tools/distribution/xslt/royaltyshare-import.xsl';

sub _init {
    my $self = shift;
    my %args = @_;

    assert( $args{client_id}, "Client ID required" );

    $self->{_albumID} = $args{album_id};
    $self->{_raw}     = $args{raw};

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

sub _process {
    my $self = shift;

    $self->debug( "Processing client: " . Common::RSApp::GetClientID );

    $self->_dumpXML();
}

sub _dumpXML {
    my $self    = shift;
    my $albumID = $self->{_albumID};

    my $collection;

    if ($albumID) {
        $collection = RPS::DB::Item::Album->SearchByAlbumID($albumID);
    } else {
        $collection = RPS::DB::Item::Album->GetAll();
    }

    $self->_writeHeaderXML();
    while ( my $item = $collection->next() ) {
        my $album = Distribution::Metadata::Album->new( _dbItem => $item );
        $self->_writeAlbumXML($album);
    }
    $self->_writeFooterXML();
}

sub _writeHeaderXML {
    print "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
    print "<import specVersion=\"1.4\">\n";
}

sub _writeFooterXML {
    print "</import>\n";
}

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

    assert($album);

    my $xmlSource = Common::WriteXML::GetXMLString( $album, 'album', skip_definition => 1, skip_array_indexing => 1 );

    if ( $self->{_raw} ) {
        print "$xmlSource\n";
    } else {
        print $self->_translateXML($xmlSource);
    }
}

sub _translateXML {
    my $self = shift;
    my $xml = shift || return;

    my $xml_parser  = new XML::LibXML();
    my $xslt_parser = new XML::LibXSLT();

    my $xsl_source = $xml_parser->parse_file(kImportTransform);
    my $xml_source = $xml_parser->parse_string($xml);
    my $stylesheet = $xslt_parser->parse_stylesheet($xsl_source);

    my $result = $stylesheet->transform($xml_source);

    #    return $stylesheet->output_string($result);
    return Distribution::Util::xml_pp( $stylesheet->output_string($result) );
}

1;
