package Toupeira::Users;

# $Id$

use strict;
use vars qw( $VERSION @ISA );
use Carp;
use Storable qw(dclone retrieve store);
use File::Path;
use Toupeira;

# apenas para debug
use Data::Dumper;

$VERSION = '0.1';
@ISA = qw( Toupeira );

##########################################################
# public functions
##########################################################
sub new {
   my $obj = shift;
   my %opts = @_;

   croak "missing 'username' parameter" if !exists $opts{username};
   croak "invalid 'username' parameter" if !$opts{username};

   my $new = $obj->SUPER::new(%opts);

   $new->get_userconf();

   return $new;
}

sub create {
   my $obj = shift;
   my %opts = @_;
  
   croak "invalid 'username' parameter" if !exists $opts{username} || !$opts{username};
   croak "invalid 'email' parameter" if !exists $opts{email} || !$opts{email};
   croak "invalid 'password' parameter" if !exists $opts{password} || !$opts{password};

   my $new = $obj->SUPER::new(%opts);

   croak "user '".$opts{username}."' already exists!" if $new->user_exists();  

   $new->save_userconf();

   return $new;
}

##########################################################
# aux functions
##########################################################
sub user_exists {
   my $obj = shift;
   my $user_home = $obj->{global}{config}{USERDIR}."/".$obj->{username};
   my $user_cfile = $user_home."/.config";

   return 0 if (!-e $user_cfile);
   return 1;
}

sub get_userconf {
   my $obj = shift;
   my $user_home = $obj->{global}{config}{USERDIR}."/".$obj->{username};
   my $user_cfile = $user_home."/.config";

   croak "error retriving user (".$obj->{username}.") configuration" if (!-e $user_cfile);

   my $tmp = retrieve($user_cfile);

   @$obj{keys %$tmp} = values %$tmp;
   return 1;
}

sub save_userconf {
   my $obj = shift;
   my $user_home = $obj->{global}{config}{USERDIR}."/".$obj->{username};
   my $user_cfile = $user_home."/.config";
   my $tmp;

   create_home($obj->{username},$user_home) if (!-e $user_cfile);

   foreach my $key (keys %$obj) {
      $tmp->{$key} = $obj->{$key} if !($key =~ /global/);
   }

   return store($tmp,$user_cfile);
}

sub create_home {
   my ($username,$user_home) = @_;

   mkpath($user_home, 0, 0755);   
   croak "error creating homedir for '$username'" if (!-e $user_home);
   return 1;
}

1;
__END__
