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

use strict;
use warnings;
use Data::Dumper;

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

use lib '/app/tools/rps/lib';
use RPS::Catalog::Album;
use RPS::LabelList;
use RPS::GenreList;
use RPS::GenreList;

use RPS::Product::ProductList;
use RPS::Product::PriceList;
use RPS::Product::StatusList;
use RPS::Product::TypeList;
use RPS::Product::ProductDigital;

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

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

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

    if ( $args{albumID} ) {

        my $loadSubs = $args{page} || $args{pageSize} ? 1 : 0;
        $self->{Album} = RPS::Catalog::Album->new(
            albumID  => $args{albumID},
            page     => $args{page},
            pageSize => $args{pageSize},
            loadSubs => $loadSubs
        );

        my $albums = RPS::DB::Item::ProductDigital->GetByAlbumID( $args{albumID} );
        my $digiproduct = $albums->next() if ($albums);
        $self->{ProductDigital} = RPS::Product::ProductDigital->new( _dbItem => $digiproduct );

    } else {
        $self->{Album} = RPS::Catalog::Album->new();
    }

    $self->{LabelList}   = RPS::LabelList->new();
    $self->{StatusList}  = RPS::Product::StatusList->new();
    $self->{TypeList}    = RPS::Product::TypeList->new();
    $self->{ProductList} = RPS::Product::ProductList->new( albumID => $args{albumID}, loadSubs => 0 );

    return $self;
}

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

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

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

    my $valid = $self->{Album}->validate();

    return $valid;
}

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

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

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


1;
