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

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 Common::FormObject;
use base 'Common::FormObject';


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

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

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

    $self->_initProperties(\%properties);

    return $self;
}

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

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

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


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

	my %tracks;
	my %discs;
	my %trackErrors;
	my %discErrors;
	my $trackStatus;
	my $discStatus;
	my $productType;

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

		if( $_ eq 'digital_disc_number' || $_ eq 'cd_disc_number' ||
		    $_ eq 'vinyl_disc_number'   || $_ eq 'dvd_disc_number' ) {
			$discs{$props->{$_}} = 1 if( $props->{$_} );
		}

		if( $_ eq 'digital_track_number' || $_ eq 'cd_track_number' ||
		    $_ eq 'vinyl_track_number'   || $_ eq 'dvd_track_number' ) {
			$tracks{$props->{$_}} = 1 if( $props->{$_} );
		}
    }

	$self->{disc_number}  = Common::FormObject::Scalar::String->new( value => join( ',', keys(%discs) ) );
	$self->{track_number} = Common::FormObject::Scalar::String->new( value => join( ',', keys(%tracks) ) );

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

        return unless( $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_disc_number' || $row->ref_column eq 'digital_track_number' ) {
				$productType = "Digital: ";
			} elsif( $row->ref_column eq 'cd_disc_number' || $row->ref_column eq 'cd_track_number' ) {
				$productType = "CD: ";
			} elsif( $row->ref_column eq 'vinyl_disc_number' || $row->ref_column eq 'vinyl_track_number' ) {
				$productType = "Vinyl: ";
			} elsif( $row->ref_column eq 'dvd_disc_number' || $row->ref_column eq 'dvd_track_number' ) {
				$productType = "DVD: ";
			} else {
				$productType = undef;
			}

			if( $row->ref_column eq 'digital_disc_number' || $row->ref_column eq 'cd_disc_number' ||
                $row->ref_column eq 'vinyl_disc_number'   || $row->ref_column eq 'dvd_disc_number' ) {

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

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

			if( $row->ref_column eq 'digital_track_number' || $row->ref_column eq 'cd_track_number' ||
                $row->ref_column eq 'vinyl_track_number'   || $row->ref_column eq 'dvd_track_number' ) {

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

				Common::Log::Debug( "Product Type: $productType " . $row->ref_column );
				$trackErrors{$productType . $row->message} = 1 if( $row->message );
			}
        }
    }

	my $errorString = join( ',', keys(%discErrors) );
	$self->{disc_number}->setXMLParam( status => $discStatus ) if( $discStatus );
	$self->{disc_number}->setXMLParam( error  => $errorString ) if( $errorString );

	$errorString = join( ',', keys(%trackErrors) );
	$self->{track_number}->setXMLParam( status => $trackStatus ) if( $trackStatus );
	$self->{track_number}->setXMLParam( error  => $errorString ) if( $errorString );

}




1;
