#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Distribution::Catalog::AdditionalArtist;
use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::XMLObject;
use Common::Assert;
use Common::UTF8;

use lib '/app/tools/distribution/lib';
use Distribution::Catalog::ArtistRole;

use Data::Dumper;

use base 'Common::XMLObject';

# This hash defines what tags/keys we expect.
#
use constant kAttribute  => 'a';
use constant kTag        => 't';
use constant kRoleObject => 'r';

# !!! Going to need to extend this to include the paths
# to the image and audio files.
#
my %gConfig = (
    'display-artist' => kTag,
    'role'           => kRoleObject,
);

sub _init {
    my ( $self, %args ) = @_;

    $self->SUPER::_init(%args);

    my $hashRef = $args{hash};

    foreach my $expectedKey ( keys %gConfig ) {
        assert( exists $hashRef->{$expectedKey}, "ERROR - hash missing key $expectedKey" );
        if ( kAttribute eq $gConfig{$expectedKey} ) {
            $self->setXMLParam( $expectedKey, Common::UTF8::Encode( $hashRef->{$expectedKey} ) );
        } elsif ( kTag eq $gConfig{$expectedKey} ) {
            $self->{$expectedKey} = Common::UTF8::Encode( $hashRef->{$expectedKey} );
        } elsif ( kRoleObject eq $gConfig{$expectedKey} ) {
            $self->{'role'} = new Distribution::Catalog::ArtistRole( hash => $hashRef->{$expectedKey} );
        }
    }

    return $self;
}

sub asHashRef {
    my $self = shift;
    my $result;
    my %data;
    my $dest_key;

    foreach my $key ( keys( %{$self} ) ) {
        next if ( $key =~ /^_/ );

        $dest_key = $key;
        $dest_key =~ s/-/_/g;

        if ( ref( $self->{$key} ) && ref( $self->{$key} ) eq 'HASH' ) {
            %data = %{ $self->{$key} };
            $result->{$dest_key} = \%data;
        } else {
            $result->{$dest_key} = $self->{$key};
        }

        $result->{role} = $self->{role}->asHashRef() if ( $self->{role} );
    }

    return $result;
}

1;
