#------------------------------------------------------------
# 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;
