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

use strict;
use warnings;

use Data::Dumper;

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::Track;
use RPS::DB::Item::Artist;
use RPS::DB::Item::TrackLicense;
use RPS::DB::Item::TrackContract;
#use RPS::DB::Item::ProductTrack;
#use RPS::DB::Item::Product;
use RPS::Master::Master;
use RPS::DB::Item::Album;

use Common::FormObject;

use RPS::Track::Track;
use base 'RPS::Track::Track';


sub save
{
    my ($self) = @_;

    my $dbObj = $self->_saveTrack();
    $self->_saveProductTrack($dbObj);
	$self->{AdditionalArtistList}->save( trackID => $self->TrackID )
	    if( $self->{AdditionalArtistList} );
    $self->_init(_dbItem => $dbObj);
}

sub OLDsave
{
    my ($self, $albumID) = @_;

    if ($self->Delete())
    {
        $self->delete($albumID);
        return;
    }

    if (! $self->{_hasData})
    {
        return;
    }


    $self->AlbumID($albumID);
	#$self->TrackOrder($$trackOrderRef++);

    my $dbObj = $self->_saveTrack();
    #$self->_saveProductTrack($dbObj, $productID);
    $self->_init(_dbItem => $dbObj);
}


sub _saveProductTrack
{
    my ($self, $trackDBObj) = @_;
    
    my $albumProduct = RPS::DB::Item::Product->GetDigitalAlbumProduct($self->AlbumID());

    # Create/update the track product for this track.
    #
    my $trackProduct = RPS::DB::Item::Product->GetDigitalTrackProduct($trackDBObj->track_id, $albumProduct->product_id);
    if (! $trackProduct)
    {
        $trackProduct = RPS::DB::Item::Product->Create
        (
            product_type_id => RPS::DB::Item::Product::kProductTypeDigitalTrack,
            parent_product_id => $albumProduct->product_id,
            asset_id => $trackDBObj->track_id,
        );
    }

    # Sync the track product with the main digital album product.
    #    
    $trackProduct->product_code($albumProduct->product_code);
    $trackProduct->upc_ean($albumProduct->upc_ean);
    $trackProduct->release_date($albumProduct->release_date);
    $trackProduct->product_status_id($albumProduct->product_status_id);

    $trackProduct->save();


    # Create/update the product_track table entry
    #
    # !!! Here is my chance to set the disc and track num correctly...
    #
    my $productTrack = RPS::DB::Item::ProductTrack->Lookup
    (
        product_id => $albumProduct->product_id,
        track_id => $trackDBObj->track_id,
    );

    if (! $productTrack)
    {
        my ($nextDiscNum, $nextDiscTrack) = RPS::DB::Item::ProductTrack->GetNextDiscNumAndDiscTrack($albumProduct->product_id);
        $productTrack = RPS::DB::Item::ProductTrack->Create
        (
            product_id  => $albumProduct->product_id,
            track_id => $trackDBObj->track_id,
            disc_number => $nextDiscNum,
            disc_track => $nextDiscTrack,
        );
    }

#    $productTrack->disc_number($self->DiscNumber());
#    $productTrack->disc_track($self->DiscTrack());
    $productTrack->save();
}


sub BROKENdelete
{
	my ($self, $albumID) = @_;


    # Does this track actually _exist_?
    #
    my $trackID = $self->TrackID();
    return unless $trackID;


    # delete the Master
    #
#    $self->{Master}->delete();


    # Delete the product_track table entry
    #
#    my $productTrack = RPS::DB::Item::ProductTrack->Lookup
#    (
#        product_id => $productID,
#        track_id => $trackID,
#    );
#    if ($productTrack)
#    {
#        $productTrack->delete();
#    }


    # Delete the track product for this track.
    #
#    my $trackProduct = RPS::DB::Item::Product->GetDigitalTrackProduct($trackID);
#    if ( $trackProduct)
#    {
#        $trackProduct->delete();
#    }


    # Delete the track
    #
    my $track = RPS::DB::Item::Track->Lookup(track_id => $trackID);
    if ($track)
    {
        $track->delete();
    }


    return 1;
}


# The container will want to know whether a track has data, so it can choose to ignore it
# when re-ordering the tracks.
#
sub hasData
{
    my ($self) = @_;
    return $self->{_hasData};
}


###
1;# Play nicely.
###
