#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::Distribution::AlbumDetail;

use strict;
use warnings;

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

use lib '/app/tools/metadata/lib';
use Metadata::DB::Item::ContentImportData;

use lib '/app/tools/metadata/lib';
use RPS::Distribution::TrackDetailList;

use Common::FormObject;
use base 'Common::FormObject';

use Data::Dumper;

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

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

    my %properties;
	if ($args{_dbItem})	{
		$self->_propertiesFromDBItem(\%properties, $args{_dbItem});
	}

    $self->{_get_tracks} = $args{get_tracks};

    $self->_initProperties(\%properties);

    return $self;
}

sub _propertiesFromDBItem
{
	my ($self, $hrProperties, $dbItem) = @_;

    $self->setXMLParam( status => $dbItem->{status} )
       if( $dbItem->{status} );

    use Data::Dumper;
    Common::Log::Debug( Dumper($hrProperties) );

    foreach ( (Metadata::DB::Item::ContentImportData::kAlbumColumns) ) {
        $hrProperties->{$_} = $dbItem->$_;
    }

    $hrProperties->{track_count} = $dbItem->{track_count};
}


sub _initProperties
{
	my ($self, $props) = @_;
    my $row;
	my $max = {};

	my $errorString;
    my $maxStatus;
    my $productType;

    my %releaseDates;
	my %releaseDateErrors;

    foreach ( keys( %$props ) ) {
	    $self->{$_} = Common::FormObject::Scalar::String->new(
	        value => $props->{$_});

        if( $_ eq 'digital_release_date' || $_ eq 'cd_release_date' ||
		    $_ eq 'vinyl_release_date'   || $_ eq 'dvd_release_date' ) {
			$releaseDates{$props->{$_}} = 1 if( $props->{$_} );
		}
    }

	$self->{release_date} = Common::FormObject::Scalar::String->new( value => join( ',', keys(%releaseDates) ) );

    if( $props->{content_import_data_id} ) {
        my $status = Metadata::DB::Item::ContentImportDataStatus->Search(
            content_import_data_id => $props->{content_import_data_id} );

        if( $status ) {

            while( $status->hasNext() ) {
                $row = $status->next();

                if( ! $max->{$row->ref_column} || $max->{$row->ref_column} < $row->status ) {
					$max->{$row->ref_column} = $row->status;
					if( $row->ref_column && $self->{$row->ref_column} ) {
						$self->{$row->ref_column}->setXMLParam(
							error => $row->message );
						$self->{$row->ref_column}->setXMLParam(
	                        status => $row->status );
					}
				}

			    if( $row->ref_column eq 'digital_release_date'  ) {
    				$productType = "Digital: ";
			    } elsif( $row->ref_column eq 'cd_release_date'  ) {
    				$productType = "CD: ";
			    } elsif( $row->ref_column eq 'vinyl_release_date'  ) {
    				$productType = "Vinyl: ";
			    } elsif( $row->ref_column eq 'dvd_release_date'  ) {
    				$productType = "DVD: ";
			    } else {
    				$productType = undef;
			    }

                if( $row->ref_column eq 'digital_release_date' || $row->ref_column eq 'cd_release_date' ||
                    $row->ref_column eq 'vinyl_release_date'   || $row->ref_column eq 'dvd_release_date' ) {

					if( $row->status && $maxStatus ) {
						$maxStatus = $maxStatus > $row->status ? $maxStatus : $row->status;
					} elsif( $row->status ) {
					    $maxStatus = $row->status;
				    }

					$releaseDateErrors{$productType . $row->message} = 1 if( $row->message );
				}
            }
        }
    }

	$errorString = join( ',', keys(%releaseDateErrors) );
	$self->{release_date}->setXMLParam( status => $maxStatus ) if( $maxStatus );
	$self->{release_date}->setXMLParam( error  => $errorString ) if( $errorString );

    $self->{Tracks} = RPS::Distribution::TrackDetailList->new(
        catalog_no => $props->{catalog_no} )
        if( $self->{_get_tracks} );
}


1;
