#------------------------------------------------------------
# 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;    #
###
