#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::Track::Command::MechanicalExempt;
use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::Catalog::Command::Show;
use RPS::DB::Item::Track;

use lib '/app/tools/common/lib';
use RSApache::Response::JSON;
use Common::FormObject;

use RPS::XMLCommand;
use base 'RPS::XMLCommand';

sub cmd  { return 'mech'; }
sub area { return 'track'; }

sub execute {
    my ($self) = @_;

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $trackID       = $self->getParam("TrackID");
    my $albumID       = $self->getParam("AlbumID");
    my $productFilter = $self->getParam("productFilter");
    my $licenseFilter = $self->getParam("licenseFilter");
    my $value         = $self->getParam("value") ? 1 : 0;

    my $tracks = [];

    my $returnValue = 1;

    if ($albumID) {
        my $trackColl = RPS::DB::Item::Track->GetTracksByAlbumIDFiltered(
            $albumID,
            type   => 'US',
            filter => {
                productFilter => $productFilter,
                licenseFilter => $licenseFilter
            }
        );
        while ( $trackColl->hasNext() ) {
            push @$tracks, $trackColl->next();
        }
    } elsif ($trackID) {
        my $trackIDArray = $trackID;
        if ( !ref $trackIDArray ) {
            $trackIDArray = [$trackID];
        }
        foreach my $id (@$trackIDArray) {
            my $dbItem = RPS::DB::Item::Track->Lookup( track_id => $trackID );
            if ($dbItem) {
                push @$tracks, $dbItem if ($dbItem);
            } else {

                # this is an error, but I don't know where to redirect?
                $returnValue = 0;
            }
        }
    } else {

        # redirect to album page?
        $returnValue = 0;
    }

    foreach my $track (@$tracks) {
        Common::Log::Debug( sprintf( "Updating exclude mechanicals for track: %s, value: %s", $track->track_id, $value ? "1" : "0" ) );
        $track->mechanical_exempt($value);
        $track->save();
    }

    return RSApache::Response::JSON->new($returnValue);
}

###
1;    # Play nicely.
###
