#------------------------------------------------------------
# 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 = " . $class->quote($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 = " . $class->quote($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 = " . $class->quote($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 = " . $class->quote($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 = " . $class->quote($trackID) . "))";
        }
    }

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

    $sql .= ' ORDER BY name';

    if ($limit && $limit =~ /^\d+$/) {
        $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 = " . $class->quote($typeID) . " AND artist_contract_id = " . $class->quote($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 = " . $class->quote($typeID)
      . " AND ((artist_contract_id IN (select artist_contract_id from album_contract where album_id = " . $class->quote($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 = " . $class->quote($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 = " . $class->quote($typeID)
      . " AND ((artist_contract_id IN (select artist_contract_id from track_contract where track_id = " . $class->quote($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 = " . $class->quote($trackID) . "))))";
    my $c = $class->GetAll($sql);
    return ( $c->size() > 0 );
}

1;

