# modulos

system("cls");

use strict;
use File::Copy;

# variables
my $version = '3.8';
my @chatconfig;
my %chatconfig;

# reading config file
open(CONFIG,"<chat.conf");

while (<CONFIG>) {
	next if $_ =~ /#/;
	next if $_ =~ /^\n$/;
	chomp;
	$_ =~ s/\s//g;
	my @temp = split(/=/,$_);
	push (@chatconfig,@temp);
}	

close(CONFIG);

%chatconfig = @chatconfig;	

my $userdb = $chatconfig{userdb};
my $server_dir = $chatconfig{server_dir};
my $server_file = $server_dir.'\\'.$userdb;
my $local_file = 'm:\\msgs\\'.$userdb;


# check server if file exists, and compare
# to the local list.txt file
# use the newest to add new users

#if (-e $server_file) {

#	my $server_file_date = -M $server_file;
#	my $local_file_date = -M $local_file;

#	if ($server_file_date < $local_file_date) {

#		copy($server_file,$local_file);

#	} else {
	    
#		copy($local_file,$server_file);

#	}
	
#} else {
	
#	copy("$userdb","$server_file") || erro();

#}

open(FILE,"<$userdb") || die "cannot open file: $!";

my @list = <FILE>;

close(FILE);

my %list;

foreach (@list) {
	next if $_ =~ /#/;
	chomp;
	next unless ($_ =~ /:/);
	my @id = split(/:/,$_);
	$list{$id[1]} = $id[0];
}

# correct lowercase to uppercase
# $name =~ s/(\S+)/\u\L$1/g;


# definindo quem está rodando o programa

my $owner = owner_setup();

# ordenando os nomes da lista por apelidos (ordem crescente)
my @order = keys(%list);
@order = sort(@order);
my $option;

while (0 < 1) {

# contador
	my $i = 0;

	print "---------------------------------------------------------\n";
	print "Programa de envio de mensagens do Seo Creysson versao $version\n\n\n";
	print "Ola $owner.\n";
	print "Escolha o sujeito para quem voce quer mandar uma mensagem:\n";

	foreach (@order) {
		print "$i. $_\n";
		$i++;
	}

	my $broadcast = $i;
	print "$i. Broadcast para los hermanos\n";
	my $end = ++$i;
	print "$i. Sair\n";

	print "Opcao selecionada: ";
	$option = <STDIN>;

# teste de entrada de dados
	unless ($option =~ /\d/ and $option >= 0 and $option <= $end) {
		system("cls");
		print "##################################\n";
		print "#Digite um numero valido animal !#\n";
		print "##################################\n\n";
		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)) {

# você não quer enviar a mensagem de broadcast para vc mesmo.		
			next if ( $_ =~ /$ENV{username}/i );
			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;

	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);
}

# funcao de mensagens de erro

sub erro {

	print "Ocorreu um erro ao tentar copiar o arquivo $userdb:\n";
	print "o arquivo $userdb nao existe.\n" if (!-e $userdb);
	print "o diretorio $server_dir nao esta disponivel.\n" if (!-r $server_file);	

}


sub owner_setup {

	my $owner;

	foreach (keys(%list)) {

		if ($list{$_} eq $ENV{username} ) {
			$owner = $_;		
			last;
		}
	}

	return $owner;
}