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