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