#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::DB::Item::AlbumContract;
use strict;
use warnings;
use lib '/app/tools/common/lib';
use Common::DB::Item;
use Common::RSApp;
use Common::DB::ItemCollection;
use Common::Assert;
use base 'Common::DB::Item';

use constant kTable => 'album_contract';
use constant kDB => Common::DB::Item::kClientDB();

use constant kStatusActive => 1;
use constant kStatusInactive => 2;


sub SetAsControlledComp
{
    my ($class, $albumID, $albumContractID) = @_;

    # First, set the 'is_controlled_comp' flag to 0 for everybody
    #
    my $dbo = Common::RSApp::GetClientDB();
    $dbo->DoCmd("UPDATE " . kTable . " SET is_controlled_comp=0 WHERE album_id=$albumID");

    # Now select the new one, if specified.
    #
    if ($albumContractID)
    {
        $dbo->DoCmd("UPDATE " . kTable . " SET is_controlled_comp=1 WHERE album_contract_id=$albumContractID");
    }
}

sub SetAsCAControlledComp
{
    my ($class, $albumID, $albumContractID) = @_;

    # First, set the 'is_ca_controlled_comp' flag to 0 for everybody
    #
    my $dbo = Common::RSApp::GetClientDB();
    $dbo->DoCmd("UPDATE " . kTable . " SET is_ca_controlled_comp=0 WHERE album_id=$albumID");

    # Now select the new one, if specified.
    #
    if ($albumContractID)
    {
        $dbo->DoCmd("UPDATE " . kTable . " SET is_ca_controlled_comp=1 WHERE album_contract_id=$albumContractID");
    }
}

sub GetCComp
{
	my ($class, $albumID, $ccomp) = @_;
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE album_id=$albumID AND is_controlled_comp=1";

	my $collection = Common::DB::ItemCollection->new(
	 class => "RPS::DB::Item::AlbumContract",
	 query => $sql,
	 dbID => kDB,
	);

	return ($collection->size) ? $collection->next() : undef;
}

sub GetCACComp
{
	my ($class, $albumID, $ccomp) = @_;
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE album_id=$albumID AND is_ca_controlled_comp=1";

	my $collection = Common::DB::ItemCollection->new(
	 class => "RPS::DB::Item::AlbumContract",
	 query => $sql,
	 dbID => kDB,
	);

	return ($collection->size) ? $collection->next() : undef;
}


sub GetByContractIDAlbumID
{
	my ($class, $contractID, $albumID) = @_;
    assert($contractID);
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE artist_contract_id=$contractID AND album_id=$albumID";

	my $collection = Common::DB::ItemCollection->new(
	 class => "RPS::DB::Item::AlbumContract",
	 query => $sql,
	 dbID => kDB,
	);

	return ($collection && $collection->hasNext) ? $collection->next : undef;
}


sub GetByAlbumID
{
	my ($class, $albumID) = @_;
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE album_id=$albumID";

    return $class->SUPER::GetAll($sql);
}

sub GetByAlbumIDThatHaveControlledComp
{
	my ($class, $albumID) = @_;
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE album_id=$albumID and artist_contract_id in (select artist_contract_id from controlled_composition)";

    return $class->SUPER::GetAll($sql);
}



sub GetByContractID
{
	my ($class, $contractID) = @_;
    assert($contractID);

	my $sql = "SELECT * FROM ".kTable." WHERE artist_contract_id=$contractID";

    return $class->SUPER::GetAll($sql);
}


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

    my $sql = "SELECT * FROM ".kTable." where cross_collateralized=1";

    return $class->SUPER::GetAll($sql);
}


sub GetByPayorIDArtistIDAlbumID
{
    my ($class, $payorID, $artistPayeeID, $albumID) = @_;
    assert($payorID);
    assert($artistPayeeID);
    assert($albumID);

    my $sql = "SELECT * FROM ".kTable." WHERE album_id=$albumID"
     . " AND artist_contract_id IN "
     . " (SELECT artist_contract_id FROM new_artist_contract WHERE artist_payee_id=$artistPayeeID AND payor_id=$payorID)";


	my $collection = Common::DB::ItemCollection->new(
	 class => "RPS::DB::Item::AlbumContract",
	 query => $sql,
	 dbID => kDB,
	);

    assert($collection->size < 2);

    return $collection->next;
}

sub HasBeenIncludedInRoyaltyRun
{
    my ($class, $albumContractID) = @_;

    my $item = $class->Lookup(album_contract_id => $albumContractID);
    return undef unless $item;

    my $dbo = Common::RSApp->GetClientDB();

    my $sql = "SELECT COUNT(*) FROM artist_royalty_income_item INNER JOIN new_artist_contract_term USING (artist_contract_term_id) WHERE album_id=".$item->album_id." AND (track_id IS NULL or track_id < 1) AND artist_contract_id=".$item->artist_contract_id;

    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    my $count = $hr->{"COUNT(*)"};
    return ($count > 0);
}



1;

