#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package Support::User::User;

use strict;
use warnings;
use Carp;

use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/support/lib';
use Support::SupportRole::SupportRole;
use Support::SupportRole::SupportRoleList;
use Support::DB::Item::UserSupportRole;
use Support::DB::Item::ModuleAccess;
use Support::DB::Item::Module;

use lib '/app/tools/appuser/lib';
use AppUser::User::User;
use base 'AppUser::User::User';

sub _initProperties {
    my $self = shift;

    $self->SUPER::_initProperties(@_);

    $self->{Role} = new Support::SupportRole::SupportRole( userID => $self->UserID );
    $self->{Modules} = new Support::Module::ModuleList( userID => $self->UserID );
    $self->{SupportRoles} = new Support::SupportRole::SupportRoleList();

    return $self;
}

sub validate {
    return 1;
}

sub save {
    my $self = shift;
    my %args = @_;

    my $cgiArgs = $args{form};

    #
    # Save the Support Role
    #
    my $dbRole = Support::DB::Item::UserSupportRole->LookupByUserID( user_id => $cgiArgs->{UserID} );

    # Add / Update a new role
    if ( $cgiArgs->{supportRoleID} ) {
        $dbRole = Support::DB::Item::UserSupportRole->Create unless ($dbRole);

        $dbRole->support_role_id( $cgiArgs->{supportRoleID} );
        $dbRole->user_id( $cgiArgs->{UserID} );

        $dbRole->save();

        # Delete the user role;
    } else {
        $dbRole->delete() if ($dbRole);
    }

    #
    # Save module permissions
    #

    my $modules = Support::DB::Item::Module->GetAll();

    while ( $modules->hasNext() ) {
        my $module = $modules->next();
        my $dbAccess = Support::DB::Item::ModuleAccess->LookupUser( $self->UserID(), $module->module_id );

        $dbAccess = Support::DB::Item::ModuleAccess->Create()
          unless ($dbAccess);

        my $write_variable = "module_write_" . $module->slug;
        my $write_value = $cgiArgs->{$write_variable} ? 1 : 0;

        my $read_variable = "module_read_" . $module->slug;
        my $read_value = $cgiArgs->{$read_variable} ? 1 : 0;

        # Add access to a module
        $dbAccess->user_id( $self->UserID() );
        $dbAccess->module_id( $module->module_id );
        $dbAccess->can_read($read_value);
        $dbAccess->can_write($write_value);
        $dbAccess->save();
    }

    $self->_init( userID => $self->UserID );

}

1;
