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

use strict;
use warnings;

use Data::Dumper;

use lib '/app/tools/rps/lib';
use RPS::LabelContract::GroupTerm;
use RPS::DB::Item::LabelContract;
use RPS::DB::Item::LabelContractGroupTerm;

use lib '/app/tools/common/lib';

use Common::FormHash;
use base 'Common::FormHash';


sub _tagName
{
    return 'GroupTerm';
}


sub _getItemCollection
{
    my ($self, %args) = @_;

    if (!$args{labelContractID})
    {
        return undef;
    }

    my $collection = RPS::DB::Item::LabelContractGroupTerm->GetByLabelContractID($args{labelContractID});
    return $collection;
}


sub _keyMethodName
{
    return 'LabelContractGroupTermID';
}


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

    if($self->{_labelContractID})
    {
        return RPS::LabelContract::GroupTerm->new(labelContractID => $self->{_labelContractID});
    }
    
    return RPS::LabelContract::GroupTerm->new();
}


sub _getObjectFromDBItem
{
    my ($self, $dbItem) = @_;

    return RPS::LabelContract::GroupTerm->new(_dbItem => $dbItem);
}


sub _addObject
{
    my ($self, $object) = @_;

    $self->SUPER::_addObject($object);

    if ($self->{_dependency} && exists $self->{_dependency}{$object->LabelContractGroupTermID()})
    {
        $object->setDependency();
    }
}


sub _init
{
	my ($self, %args) = @_;


    # We want to keep track of the contract ID for later.
    #
	if($args{labelContractID})
	{
        #$self->{_dependency} = RPS::DB::Item::LabelContractTerm->GetTermDependencyByLabelContractID($args{labelContractID});
		$self->{_labelContractID} = $args{labelContractID};
    }

	return $self->SUPER::_init(%args);
}


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

	my $valid = 1;
    foreach my $termID (keys %{$self->{GroupTerm}})
    {
        my $term = $self->{GroupTerm}{$termID};
		next if (!defined $term);

        if (! $term->validate())
        {
            $valid = 0;
        }
	}

	return $valid;
}


# Overriding inherited method to return the keys sorted by GroupTerm->Priority.
#
sub getKeys
{
    my ($self) = @_;

    my $keys = $self->getAllKeysSortedByGroupTermPriority();

    return $keys;
}


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

    my @keys = sort {$self->{GroupTerm}{$a}->Priority() <=> $self->{GroupTerm}{$b}->Priority()} keys %{$self->{GroupTerm}};
    return \@keys;
}

sub save
{
    my ($self, %args) = @_;

    my $keysSortedByPriority = $self->getAllKeysSortedByGroupTermPriority();

    my $newPriority = 1;  
    foreach my $groupTermID (@$keysSortedByPriority)
    {
        my $groupTermObj = $self->{GroupTerm}{$groupTermID};
        #if (! $groupTermObj->Delete())
        #{
            $groupTermObj->Priority($newPriority++);
        #}
        $groupTermObj->save();
    }
}


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

	return $self->{_labelContractID};
}


###
1;#
###
