#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::DB::Item::ContractTermSource;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::Assert;
use Common::DB::ItemCollection;
use Common::DB::Item;
use base 'Common::DB::Item';

use constant kTable => 'contract_term_source';
use constant kDB => Common::DB::Item::kCommonDB();

use constant kContractTermSourceMasterLicense		  => 4;
use constant kContractTermSourceSyncLicense		      => 5;
use constant kContractTermSourceCD				      => 6;
use constant kContractTermSourceLP				      => 7;
use constant kContractTermSourceCassette			  => 8;
use constant kContractTermSourceDVDCDSet              => 9;
use constant kContractTermSourceCDSingle              => 10;
use constant kContractTermSourceDblCD                 => 11;
use constant kContractTermSourceDVD                   => 12;
use constant kContractTermSourceVHS                   => 13;
use constant kContractTermSourceLP5                   => 14;
use constant kContractTermSourceDigitalAlbum		  => 15;
use constant kContractTermSourceDigitalTrack		  => 16;
use constant kContractTermSourceDigitalStream		  => 17;
use constant kContractTermSourceDigitalTethered	      => 18;
use constant kContractTermSourceRingtone			  => 19;
use constant kContractTermSourceJukebox               => 20;
use constant kContractTermSourceDualDownload          => 21;
use constant kContractTermSourceBackground            => 22;
use constant kContractTermSourceVPD                   => 23;
use constant kContractTermSourceDigitalAlbumPremium   => 24;
use constant kContractTermSourceDigitalTrackPremium   => 25;
use constant kContractTermSourceDigitalAlbumUpgrade   => 26;
use constant kContractTermSourceDigitalTrackUpgrade   => 27;
use constant kContractTermSourceCassetteSingle        => 28;
use constant kContractTermSourceBluRay                => 29;
use constant kContractTermSourcePerformanceIncome     => 30;

sub GetAll
{
        my ($class) = @_;

            my $sql = "SELECT * FROM ".kTable." ORDER BY parent_contract_term_source_id,name";
                return $class->SUPER::GetAll($sql);
}


sub GetAllContractTermIncomeSourceMap
{
    my ($class) = @_;

    # !!! This is NOT going to return a DB::Item collection.
    # !!! Just going to return a hash of array references.
    #
    my %hash;
    my $dbo = Common::RSApp::GetCommonDB();
    my $sql = "SELECT * FROM contract_term_income_source";
    my $sth = $dbo->DoCmd($sql);
    while (my $hr = $sth->fetchrow_hashref())
    {
        push @{$hash{$hr->{income_source_id}}}, $hr->{contract_term_source_id};
    }

    return \%hash;
}

sub hasDigital {
    my $class = shift;
    my $contractTermSourceID = shift || return;
    my $dbo = Common::RSApp::GetCommonDB;

    assert( $contractTermSourceID );

    my $sql = "SELECT * FROM " . kTable . " " .
                  "INNER JOIN contract_term_income_source USING ( contract_term_source_id ) " .
                  "INNER JOIN income_source USING (income_source_id) " .
              "WHERE format IN (2,3) AND " .
                    "contract_term_source_id = " . $dbo->DBQuote($contractTermSourceID);


    my $collection = $class->SUPER::GetAll($sql);
    return $collection->hasNext;
}

sub hasPhysical {
    my $class = shift;
    my $contractTermSourceID = shift || return;
    my $dbo = Common::RSApp::GetCommonDB;

    assert( $contractTermSourceID );

    my $sql = "SELECT * FROM " . kTable . " " .
                  "INNER JOIN contract_term_income_source USING ( contract_term_source_id ) " .
                  "INNER JOIN income_source USING (income_source_id) " .
              "WHERE format = 1 AND " .
                    "contract_term_source_id = " . $dbo->DBQuote($contractTermSourceID);

    my $collection = $class->SUPER::GetAll($sql);
    return $collection->hasNext;
}

sub containsIncomeSource {
    my $class = shift;
    my $incomeSourceID = shift || return;
    my $contractTermSourceID = shift || return;
    my $dbo = Common::RSApp::GetCommonDB;

    assert( $contractTermSourceID );

    my $sql = "SELECT * FROM " . kTable . " " .
                  "INNER JOIN contract_term_income_source USING ( contract_term_source_id ) " .
              "WHERE  " .
                    "contract_term_source_id = " . $dbo->DBQuote($contractTermSourceID) . " AND " .
                    "income_source_id = " . $dbo->DBQuote($incomeSourceID);

    my $collection = $class->SUPER::GetAll($sql);

    return $collection->hasNext();
}
1;
