# modulos

system("cls");

use strict;

# variables
my $version = '3.9';
my %chatconfig;

# reading config file
open(CONFIG,"<chat.conf") or die "Cannot read configuration file chat.conf: $!\n";

# small file, throw everything into memory is faster
my @content = <CONFIG>;
close(CONFIG);

my @temp;

foreach ( @content ) {

    next if $_ =~ /#/;
    next if $_ =~ /^\n$/;
    chomp;
    $_ =~ s/\s//g;
    @temp = split(/=/,$_);
    $chatconfig{$temp[0]} = $temp[1];
    @temp = ();

}	
@content = ();

my $userdb = $chatconfig{userdb};

open(FILE,"<$userdb") or die "cannot open file: $!";
@content = <FILE>;
close(FILE);

my %list;

# criando a lista de usuários. o usuário que esta rodando o
# programa não deve ser incluído no mesmo

my $owner;

foreach (@content) {
	
    next if $_ =~ /#/;
    next unless ($_ =~ /:/);
    chomp;
    @temp = split(/:/,$_);
    
    if ( $temp[0] eq $ENV{username} ) {

        $owner = $temp[1];
        next;

    }

    $list{$temp[1]} = $temp[0];
        
}

# ordenando os nomes da lista por apelidos (ordem crescente)
my @order = keys(%list);
@order = sort(@order);
my $option;
my $index;
my $user;

while (0 < 1) {

    $index = 0;

print <<BLOCK;
----------------------------------------------------------
Programa de envio de mensagens do Seo Creysson versao $version



Ola $owner.
Escolha o sujeito para quem voce quer mandar uma mensagem:
BLOCK


    foreach $user(@order) {
	
        print "$index. $user\n";
        $index++;
    
    }

    my $broadcast = $index;
    print "$index. Broadcast para los hermanos\n";
    my $end = ++$index;
    print "$index. Sair\n";

    print "Opcao selecionada: ";
    $option = <STDIN>;

# teste de entrada de dados
    unless ($option =~ /\d/ and $option >= 0 and $option <= $end) {

        system("cls");

print <<BLOCK;
##################################
#Digite um numero valido animal !#
##################################
BLOCK
        next;

    }

# saída do programa

    if ($end == $option) {

        system("cls");
	unlink('creysson.tmp');
	unlink('creysson2.tmp');
	print "Firma cara. Falouz.\n";
	print "-----------------------------------------------------------------\n\n";
	print "\t\t\tby Alceu (glasswalk3r\@yahoo.com.br)\n";
	sleep 1;
	exit;

    }


# definindo o destinatario para imprimir confirmacao

    my $destinatario;

    if ($broadcast == $option) {

	$destinatario = "BROADCAST";

    } else {

        $destinatario = $order[$option];
	
    }	


# definindo confirmacao e a mensagem

    print "Legal, agora digite a mensagem para > $destinatario <. Quando acabar, digite ENTER.\n";
    print "Se quiser abortar o envio, nao digite nada e pressione ENTER.\n\n";
    print "Mensagem: ";

    my $message = <STDIN>;

    if ($message =~ /^\n$/) {
	
	system("cls");
	print "A mensagem NAO foi enviada.\n";
	next;

    }

    chomp($message);

    if ($broadcast == $option) {
	
       system('cls');

       foreach ( values(%list) ) {

	   send_message("$_","$owner [broadcast]: $message");
      
       }

       next;

     } else {
	
	system("cls");
	send_message("$list{$order[$option]}","$owner: $message");

     }

# fim do loop
}



#FUNCOES

# função para envio de mensagens

sub send_message {

# enviando a mensagem duas vezes (para evitar pedidos de repetição!)
# Meu obrigado ao Marcos Barbosa pela idéia

	my $repeat_message;

# o net send escreve em STDERR... vai entender...
	open(STDERR,'>creysson.tmp');

	for ($repeat_message = 0; $repeat_message < 2; $repeat_message++) {

	    system("net send $_[0] $_[1] > creysson2.tmp") && print "Nao pude enviar a mensagem para $order[$option].\n";
	
        }

	close(STDERR);
}