#!/usr/bin/env perl

use strict;
use warnings;

use Acme::Indigest::Crypt;
use Term::ReadKey;

sub _readline {
    my $prompt = shift;
    if ( defined $prompt ) {
        print $prompt;
    }
    ReadMode 2;
    my $line = <STDIN>;
    chomp $line;
    ReadMode 0;
    print "\n";
    return $line;
}

sub _digest {
    my $phrase = shift;
    my $salt_string = shift;
    my $rounds = shift;
    defined or $_ = $ENV{ AIC_SALT_STRING } for $salt_string;
    defined or $_ = $ENV{ AIC_ROUNDS } for $rounds;
    return Acme::Indigest::Crypt->digest( $phrase, $salt_string, $rounds );
}

if ( -t STDIN ) {
    if ( $ENV{ AIC_EMIT } ) {
        my $phrase = _readline( 'Passphrase: ' );
        print _digest $phrase;
    }
    else {
        my $phrase = _readline( 'Passphrase: ' );
        my $phrase_again = _readline( 'Passphrase (again): ' );
        if ( $phrase ne $phrase_again ) {
            die "Passphrase mismatch\n";
        }
        print _digest( $phrase ), "\n";
    }
}
else {
    print Acme::Indigest::Crypt->digest_multiple( join '', <STDIN> );
}

1;
