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

use strict;
use warnings;
use Carp;

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

use lib '/app/tools/rps/lib';
use RPS::Product::DistributionServiceList;

use lib '/app/tools/distribution/lib';
use Distribution::DB::Item::ProductDistribution;
use Distribution::DB::Item::ServiceAccount;

use base 'RPS::Product::ProductDigital';

sub _initProperties {
    my ( $self, $prop ) = @_;

    $self->SUPER::_initProperties($prop);

    $self->{DistributionServices} = new RPS::Product::DistributionServiceList();

    my $pd;
    if ( $self->{DistributionServices}->getList() ) {
        foreach ( @{ $self->{DistributionServices}->getList() } ) {
            $pd = undef;
            $pd = Distribution::DB::Item::ProductDistribution->Search(
                service_id => $_->ServiceID,
                product_id => $self->ProductID,
                valid      => 0
            ) if ( $_->ServiceID );

            if ($pd) {
                $_->{Staged} = $pd->product_distribution_id ? 1 : 0;
                $_->{Queued} = $pd->distribution_process_id ? 1 : 0;
                $_->{DeliveryDate} = $pd->delivery_date;
                $_->{Denied}       = $pd->denied;
                $_->{ThirdParty}   = $pd->third_party;
                $_->{DeniedDate}   = $pd->date_modified if ( $pd->denied );
            }

            if ( $_->ServiceID ) {
                $_->{PricingTiers} = new RPS::Product::PricingTierList(
                    service_id => $_->ServiceID,
                    product_id => $self->ProductID
                );

                $_->{Source} = Distribution::DB::Item::ServiceAccount->GetAccountType(
                    service_id => $_->ServiceID,
                    client_id  => Common::RSApp::GetClientID()
                );
            }
        }
    }

    return $self;
}

sub Services {
    my $self = shift;
    return @{ $self->{DistributionServices}->getList() };
}

1;
