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

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


sub Search
{
    my ($class, %args) = @_;

    my $searchTerm = $args{searchTerm};
    my $limit = $args{limit};
    my $contractID = $args{contractID};
    my $albumID = $args{albumID};
    my $trackID = $args{trackID};
            

    my $where;

    if ($searchTerm)
    {
        $where = "(" . $class->SUPER::SearchSyntax(field => 'name', value => $searchTerm) . ")";

        if ($contractID)
		    {
		        $where .= " AND license_income_type_id IN (SELECT license_income_type_id FROM artist_contract_license_income WHERE artist_contract_id = $contractID AND inactive = 0)";
		    }
		  	elsif ($albumID && $trackID)   
		  	{
		  			$where .= " AND ((license_income_type_id IN (SELECT license_income_type_id FROM artist_contract_license_income WHERE inactive = 0 AND artist_contract_id IN (SELECT artist_contract_id FROM album_contract WHERE album_id = $albumID))) OR (license_income_type_id IN (SELECT license_income_type_id FROM artist_contract_license_income WHERE inactive = 0 AND artist_contract_id IN (SELECT artist_contract_id FROM track_contract WHERE track_id = $trackID))))";
		  	}  		  	
		  	elsif ($albumID) 
		  	{
		  			$where .= " AND license_income_type_id IN (SELECT license_income_type_id FROM artist_contract_license_income WHERE inactive = 0 AND artist_contract_id IN (SELECT artist_contract_id FROM album_contract WHERE album_id = $albumID))";
		  	}  
		  	elsif ($trackID) 
		  	{
		  			$where .= " AND license_income_type_id IN (SELECT license_income_type_id FROM artist_contract_license_income WHERE inactive = 0 AND artist_contract_id IN (SELECT artist_contract_id FROM track_contract WHERE track_id = $trackID))";
		  	}    		  	    
    }
          

    my $sql = 'SELECT * FROM ' . kTable;
    if ($where)
    {
        $sql .= " WHERE $where";
    }

    $sql .= ' ORDER BY name';

    if ($limit)
    {
        $sql .= " LIMIT $limit";
    }

		print STDERR $sql;

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


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

    my $sql= "SELECT * FROM artist_contract_license_income WHERE license_income_type_id=$typeID AND artist_contract_id=$contractID AND inactive = 0";
    my $c = $class->GetAll($sql);
    return ($c->size() > 0);
}

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

    my $sql = "SELECT * from artist_contract_license_income WHERE inactive = 0 AND license_income_type_id = $typeID"
     . " AND ((artist_contract_id IN (select artist_contract_id from album_contract where album_id=$albumID)) OR (artist_contract_id IN (select artist_contract_id from track_contract where track_id in (select track_id from track where album_id=$albumID))))";
    my $c = $class->GetAll($sql);
    return ($c->size() > 0);
}

sub MatchesTrackID
{
    my ($class, $typeID, $trackID) = @_;
    assert($typeID);
    assert($trackID);

    my $sql = "SELECT * from artist_contract_license_income WHERE inactive = 0 AND license_income_type_id = $typeID"
     . " AND ((artist_contract_id IN (select artist_contract_id from track_contract where track_id=$trackID)) OR (artist_contract_id IN (select artist_contract_id from album_contract where album_id in (select album_id from track where track_id=$trackID))))";
    my $c = $class->GetAll($sql);
    return ($c->size() > 0);
}
1;

