#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::Track::Form;

use strict;
use warnings;
use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/rps/lib';
use RPS::Track::Track;
#use RPS::Catalog::ArtistList;
#use RPS::Song::ComposerList;
use RPS::LabelList;
use RPS::Track::TrackContractWithArtistContractList;
use RPS::ArtistRoleList;
use RPS::RoyaltyRun::RoyaltyRunStatusList;

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

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

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

	my $albumID;
	if ($args{trackID})
	{
		$self->{Track} = $self->_instantiateTrackFromTrackID($args{trackID});
		$albumID = $self->{Track}->AlbumID();
		$self->{TrackContractList} = RPS::Track::TrackContractWithArtistContractList->new(trackID => $args{trackID});
    	$self->{RoyaltyRunStatus} = RPS::RoyaltyRun::RoyaltyRunStatusList->new( usMechanical => 1, caMechanical => 1 );
	}
	elsif($args{albumID})
	{
		$albumID = $args{albumID};
		$self->{Track} = $self->_instantiateTrackFromAlbumID($albumID);
    	$self->{RoyaltyRunStatus} = RPS::RoyaltyRun::RoyaltyRunStatusList->new();
	}

	$self->{Album} = RPS::Catalog::Album->new(albumID => $albumID, loadSubs => 0);
	#$self->{ArtistList} = RPS::Catalog::ArtistList->new();
	#$self->{ComposerList} = RPS::Song::ComposerList->new();
	$self->{LabelList} = RPS::LabelList->new();
	$self->{ArtistRoleList} = RPS::ArtistRoleList->new();


	return $self;
}

sub _instantiateTrackFromTrackID
{
    my ($self, $trackID) = @_;
    return RPS::Track::Track->new(trackID => $trackID);
}

sub _instantiateTrackFromAlbumID
{
    my ($self, $albumID) = @_;
    return RPS::Track::Track->new(albumID => $albumID);
}

sub _propertyIsEditable
{
	my ($self, $propertyName) = @_;

	# The Product (and contained objects) can be edited.
	#
	if ($propertyName eq 'Track')
	{
		return 1;
	}
	return 0;
}

sub validate
{
	my $self = shift;
	my %args = @_;

	# JPK - This is one of those situations where I _don't_ want to
	# validate everything this object contains.  It's a waste of time
	# to validate the <Track>, for example, since we don't support making
	# changes to it.
	#
	my $valid = $self->{Track}->validate( %args );

	return $valid;
}


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

	# my $userID = Common::RSApp::GetActiveUserID();

	$self->{Track}->save();
}

sub delete
{
	my ($self) = @_;
	return $self->{Track}->delete();
}

sub albumID
{
	my ($self) = @_;
	return $self->{Track}->AlbumID();
}


sub trackID
{
	my ($self) = @_;
	return $self->{Track}->TrackID();
}


###
1;#
###
