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

use strict;
use warnings;

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

use lib '/app/tools/rps/lib';
use RPS::Catalog::AdditionalArtistHash;
use RPS::Catalog::AlbumSimple;
use RPS::Catalog::EditForm;
use RPS::DB::Item::Product;

use base 'RPS::Catalog::EditForm';

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

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



    my $albumID = $args{albumID};
    my $product;
    if ($albumID)
    {
        $self->{Product} = RPS::Product::Product->new(_dbItem => RPS::DB::Item::Product->GetDigitalAlbumProduct($albumID));
    }
    else
    {
        $self->{Product} = RPS::Product::Product->new();
        $self->{Product}->ProductTypeID(RPS::DB::Item::Product::kProductTypeDigital);
        $self->{Product}->ProductStatusID(RPS::DB::Item::Product::kProductStatusActive);
    }

    $self->{ProductDigital} = RPS::Product::ProductDigital->new( productID => $self->{Product}->ProductID() );

	return $self;
}

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

	if ($albumID)
	{
		$self->{Album} = RPS::Catalog::AlbumSimple->new(albumID => $albumID, loadSubs => 0);
	}
	else
	{
		$self->{Album} = RPS::Catalog::AlbumSimple->new(loadSubs => 0);
	}
}

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

    # The Product (and contained objects) can be edited.

    return 1 if ($propertyName eq 'Album');
    return 1 if ($propertyName eq 'Product');
    return 1 if ($propertyName eq 'ProductDigital');
    return 0;
}


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

    # SUPER::Validate failes because required fields are missing with DA clients
    #my $valid = $self->SUPER::validate();

	my $valid = $self->{Product}->_validateMetadata( %args, assetID => $self->{Album}->AlbumID );

    $valid = 0
        unless($self->{Album}->validate(%args));

	return $valid;
}

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

    $self->SUPER::save();

    # Now save the digital product.
    #
    $self->{Product}->ProductCode( $self->{Product}->UPC . "-D" ) if( $self->{Product}->UPC );
    $self->{Product}->ProductTypeID( RPS::DB::Item::Product::kProductTypeDigital );
	$self->{Product}->AssetID($self->{Album}->AlbumID());
	$self->{Product}->Title($self->{Album}->Title());
	$self->{Product}->TitleClean($self->{Album}->TitleClean());
    $self->{Product}->save();

    $self->{ProductDigital}->ProductID( $self->{Product}->ProductID() );
    $self->{ProductDigital}->save();
}


###
1;#
###
