#!/usr/bin/perl -w

use 5.034;

my $file = "crm.csv";

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

unless (@ARGV){
    die "$0 <data|list>";
}

# 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>);
		print "PID: ";
		chomp (my $pid = <STDIN>);
		print "Phone(s):";
		chomp (my $phones = <STDIN>);
		
		open OUT, ">>", $file or die $!;
		say OUT "$name,$pid,$phones,".infofecha().",";
		close OUT;
	    }elsif ($_ == 2){
		($n, $p, $ph) = ask();
		say "";
		say "DELETE PROCEDURE";
		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";
		print "Name: ";
		chomp ($n = <STDIN>);
		print "PID: ";
		chomp ($p = <STDIN>);
		print "Phone(s): ";
		chomp ($ph = <STDIN>);
		
		open OUT, ">>", $file or die $!;
		say OUT "$n,$p,$ph," . infofecha() . ",";
		close OUT;
	    }elsif ($_ == 4){
		say "";
		say "DATA DUMP BEGINS HERE";
		say "=====================";
		open IN, "<", $file or die $!;
		print $_ for (<IN>);
		close IN;
		say "DATA DUMP ENDS HERE";
		say "===================";
	    }
	}	
	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;
    
    for (@global){
	chomp;
	/\,(\d+)\,$/;
	if ($1 <= $nowuseful){
	    say $_;
	}
    }
    say "=== Phone calls done/undone ===";
    open OUT, ">", $file or die $!;
    for (@global){
    ### delicado, es modificación porque hay que añadir infofecha a las lineas
	chomp;
	say $_;
	/\,(\d+)\,$/;
	if ($1 <= $nowuseful){
	    print "\t===> Done? [y/N]: ";
	    chomp (my $yn = <STDIN>);
	    if ($yn =~ /[Y|y]/){
		my $line = $_ . infofecha() . ",";
		say OUT $line;
	    }else{
		say OUT $_;
	    }
	}else{
	    say OUT $_;
	}
    }
    close OUT;
}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";
    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 =~ /[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 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

