#!/usr/bin/perl -w

use 5.034;

my $file = "crm.csv";
my $memo = "crm.memo";

unless (@ARGV){
    say "Usage: $0 <data|list>";
    say "";
    say "Data - input, dump or modify database";
    say "List - review the data and make calls";
    say "";
    exit -1;
}

unless (-e $file){
    system "touch $file";
}
unless (-e $memo){
    system "touch $memo";
}


# muestreo rotatorio con intervalos mínimos (no posible sin hacerlo demonio) y máximos

my $args = join " ", @ARGV;

my ($n,$p,$ph);

if ($args =~ /data/i){
    my $resp;
    do {
	$resp = menu();     # Esta línea presenta un menu principal de la opción "data" 
	for ($resp){
	    if ($_ == 1){
		say "";
		say "CREATION PROCEDURE";
		say "";
		say "Whithout commas,";
		print "Full name: ";
		chomp (my $name = <STDIN>);
		$name =~ s/\,//g;
		print "PID: ";
		chomp (my $pid = <STDIN>);
		$pid =~ s/\,//g;
		print "Phone(s):";
		chomp (my $phone = <STDIN>);
		$phone =~ s/\,//g;
		open OUT, ">>", $file or die $!;
		say OUT "$name,$pid,$phone,".infofecha().",";
		close OUT;
	    }elsif ($_ == 2){
		($n, $p, $ph) = ask();
		say "";
		say "DELETE PROCEDURE";
		say "";
		print "Say yes to continue: ";
		chomp (my $confir = <STDIN>);
		if ($confir =~ /yes/i){
		    open IN, "<", $file or die $!;
		    my @g = <IN>;
		    close IN;
		    open OUT, ">", $file or die $!;   
		    for (@g) {
			unless (/$n/i && /$p/i && /$ph/i){
			    say OUT $_;
			}
		    }
		    close OUT;
		}
	    }elsif ($_ == 3){
		($n, $p, $ph) = ask();
		say "";
		say "MODIFY PROCCESS: OLDER ONES PRESERVED";
		say "";
		print "Name: ";
		chomp ($n = <STDIN>);
		$n =~ s/\,//g;
		print "PID: ";
		chomp ($p = <STDIN>);
		$p =~ s/\,//g;
		print "Phone(s): ";
		chomp ($ph = <STDIN>);
		$ph =~ s/\,//g;
		open OUT, ">>", $file or die $!;
		say OUT "$n,$p,$ph," . infofecha() . ",";
		close OUT;
	    }elsif ($_ == 4){
		say "";
		say "DATA DUMP BEGIN HERE";
		say "====================";
		open IN, "<", $file or die $!;
		print $_ for (<IN>);
		close IN;
		say "==================";
		say "DATA DUMP END HERE";
		say "==================";
	    }elsif ($_ == 5){
		say "MEMOS DUMP BEGIN HERE";
		say "=====================";
		system "cat $memo";
		say "===================";
		say "MEMOS DUMP END HERE";
		say "===================";
	    }else{
		warn "Bad response";
	    }
	}	
	my $pause = <STDIN>;
    }until ($resp == 0);
}elsif ($args =~ /list/i){                 # Aquí está lo principal del programa, el objetivo "list"
    say "";
    print 'Max time (example 100 days): ';
    chomp (my $max = <STDIN>);
    say "";
    say "List of entries with dates lower than max time reached";
    say "------------------------------------------------------";
    if (0+$max ne $max || $max <=0) { $max = 0; }
    my $nowuseful = infofecha() - $max;
    
    open IN, "<", $file or die $!;
    my @global = <IN>;
    close IN;
    
    open MEMO, ">>", $memo or die $!;
    
    for (@global){
	chomp;
	/\,(\d+)\,$/;
	if (defined $1){
	    if ($1 <= $nowuseful){
		say $_;
	    }
	}
    }
    say "=== Phone calls to be done/undone ===";
    open OUT, ">", $file or die $!;
    for my $l (@global){
    ### delicado, es modificación porque hay que añadir infofecha a las lineas
	chomp $l;
	say $l;
	$l =~ /\,(\d+)\,$/;
	if (defined $1){
	    if ($1 <= $nowuseful){
		print "\t===> Done? [y/N]: ";
		chomp (my $yn = <STDIN>);
		if ($yn =~ /[Y|y]/){
		    my $ref = $l =~ /(.+)\,\d{8}\,/;
		    info($ref);
		    my $line = $l . infofecha() . ",";
		    say OUT $line;
		    say MEMO $line;
		    my $note = ">";
		    while ($note !~ /^\s*$/){		    
			print ">";
			chomp ($note = <STDIN>);
			say MEMO $note;
		    }
		}else{
		    say OUT $l;
		}
	    }else{
		say OUT $l;
	    }
	}
    }
    close OUT;
    say MEMO "";
    close MEMO;
}else{
    say "Not OK: aborting";
}

say "Good bye!";

exit 3;

sub menu {
    my $r;
top:    
    system "clear";
    say "CRM DATA MENU:";
    say "";
    say "1) Altas [default]";
    say "";
    say "2) Bajas";
    say "";
    say "3) Modificaciones";
    say "";
    say "4) Dump data";
    say "";
    say "5) Dump memos";
    say "";
    say "0) Salir";
    say "";
    print "?> ";
    chomp ($r = <STDIN>);
    if ($r =~ /[1|A|a|\n]/){
	return 1;
    }elsif ($r =~ /[2|B|b]/){
	return 2;
    }elsif ($r =~ /[3|M|m]/){
	return 3;
    }elsif ($r =~ /[4|D|d]/){
	return 4;
    }elsif ($r =~ /[5|O|o]/){
	return 5;
    }elsif ($r =~ /[0|S|s|\-]/){
	return 0;
    }else{
	goto top;
    }
}

sub ask {
    system "clear";
    say "";
    print "Name: ";
    chomp (my $n = <STDIN>);
    print "PID: ";
    chomp (my $p = <STDIN>);
    print "Phone: ";
    chomp (my $ph = <STDIN>);
    open IN, "<", $file or die $!;
    my @g = <IN>;
    close IN;
    say "Selected record(s):";
    say "-------------------";
    my $c =0;
    for (@g){
	chomp;
	if (/$n/i && /$p/i && /$ph/i){
	    say $_;
	    $c++;
	}
    }
    say "Count $c record(s)";
    say "Select better to modify or delete!" if $c > 1;
    
    return ($n, $p, $ph);
}

sub info {
    my $r = shift;
    my $last = tell( MEMO );
    seek (MEMO, 0, 1);
    my $ok;
    while (<MEMO>){
	chomp;
	if (/\,\d{8}\,/ && /$r/i){ $ok++; }
	say ":: ", $_ if $ok;
	if ( /\,\d{8}\,/ && $_ !~ /$r/i ){
	    $ok =0;
	};
    }
    seek (MEMO, $last, 0);
}

sub normaltoISO {
    my $f = shift;
    my $d = substr $f, 0, 2, "";
    my $m = substr $f, 0, 2, "";
    my $ISO = $f . $m . $d;
    return $ISO;
}

sub ISOtonormal {
    my $f = shift;
    my $y = substr $f, 0, 4, "";
    my $m = substr $f, 0, 2, "";
    my $normal = $f . $m . $y;
    return $normal;
}
    
sub infofecha {
#    my $i = shift;
    my $i = scalar localtime();
    my @datetime = split " ", $i;
                  
    my $anyo = $datetime[4];
    #    if ($anyo<66) { $anyo += 2000; }
    #    elsif ($anyo<100) { $anyo += 1900; }
    my %mes = (
        Jan => "01",
        Feb => "02",
        Mar => "03",
        Apr => "04",
        May => "05",
        Jun => "06",
        Jul => "07",
        Aug => "08",
        Sep => "09",
        Oct => "10",
        Nov => "11",
        Dec => "12",
    );
                                                          
    my $nmes = $mes{ $datetime[1] };
    my $j = $datetime[2];
#    $j-- if ($AYER);         # BUG GRATUITO INCLUIDO: No funciona el día 1 de cada mes
    my $dia = sprintf "%02d", $j;
    return $anyo  . $nmes   . $dia;
}

__END__
  
v.0.001 UNTESTED
v.0.002 UNTESTED Added memo fields for calls

