#!/usr/bin/perl

use strict;
use warnings;

use File::Slurp;

# Slurp <STDIN>
my $input = "";
print "Please paste EMail in plain text here. A single dot (.) ends the input.\n";
while (<>) {
  if ( $_ !~ m/^\.[\r\n]$/ ) {
    $input .= $_;
  } else {
    last;
  }
}

# Exit on no input.
if ( $input eq "" ) {
  print "\nNothing entered. Exiting.\n";
  exit(1);
}


print "\nOk. Processing your input.\n";



# Read existing keys into memory for dup check
my @existing_keys;
foreach my $keyfile ( read_dir('.') ) {
  next if ( not -f $keyfile ); #skip subdirectories
  push( @existing_keys, map { if ( m/^key\s\"([a-z0-9]{64})\"/ ) { $1 } else {} } read_file( $keyfile, chomp => 1 ) );
}
print "Found ".scalar(@existing_keys)." keys in local directory for duplicate comparison.\n\n";


# Walk through input data and find name/key pattern
my $detected_warnings = 0;
my @new_keys;
while ( $input =~ m/#\s*([^\n]+)\n+([a-f0-9]{64})/mig ) {
  my $name = $1;
  my $key  = $2;

  # Lowercase
  $name = lc($name);
  # Map umlauts
  $name =~ s/ä/ae/g; $name =~ s/ö/oe/g; $name =~ s/ü/ue/g; $name =~ s/ß/ss/g; $name =~ s/\s+/_/g;
  $name =~ s/Ä/ae/g; $name =~ s/Ö/oe/g; $name =~ s/Ü/ue/g;
  # Filter out unwanted chars
  $name =~ s/[^-a-z0-9_]//g;

  # Check whether file already exists
  if (-f $name) {
    print "File '$name' already exists!\n";
    $detected_warnings++;
  }

  # Check whether key already exists
  foreach my $known_key (@existing_keys) {
    next unless ($known_key eq $key);
    print "Key '$key' already exists!\n";
    $detected_warnings++;
    last;
  }  
  
  push @new_keys, { name => $name, key => $key };
}


# Exit if there are no new keys
if ( scalar @new_keys == 0) {
  print "No keys found in your input. Exiting.\n";
  exit(1);
}


# Exit on duplicates
if ($detected_warnings != 0) {
  print "\nPlease resolve your warnings and try again.\n";
  exit(1);
}


# Output git recipe
print "Please execute the following commands in order to add your keys to the peers repository.\n";
print "========================================================================================\n\n";

print "git pull\n\n";

foreach my $item (@new_keys) {
  print "echo 'key \"".$item->{key}."\";' >".$item->{name}."\n";
  print "git add ".$item->{name}."\n";
  print "git commit -m 'added ".$item->{name}."'\n\n";
}

print "git push\n\n";

1;
