package Sepia::ReadLine;
use Term::ReadLine;
use Sepia;
require Exporter;
@ISA='Exporter';
@EXPORT='repl';

sub rl_complete
{
    my ($text, $line, $start) = @_;
    my @xs;
    if (substr($line, 0, $start) =~ /^\s*$/ && $text =~ /^,(\S*)$/) {
        my $x = qr/^\Q$1\E/;
        @xs = map ",$_", grep /$x/, keys %Sepia::REPL;
    } else {
        my ($type, $str) = (substr $line, $start ?(($start-1), length($text)+1)
                                : ($start, length($text)))
            =~ /^([\$\@\%\&]?)(.*)/;
        my %h = qw(@ ARRAY % HASH & CODE * IO $ VARIABLE);
        @xs = Sepia::completions $h{$type||'&'}, $str;
    }
    @xs;
}

sub repl
{
    { package main; do $_ for @ARGV }
    $TERM = new Term::ReadLine $0;
    my $rl = Term::ReadLine->ReadLine;
    if ($rl =~ /Gnu/) {
        my $attr = $TERM->Attribs;
        $attr->{completion_function} = \&rl_complete;
    } elsif ($rl =~ /Perl/) {
        $readline::rl_completion_function = \&rl_complete;
        $readline::var_TcshCompleteMode = 1;
    # XXX: probably helpful...
    # } elsif (grep -x "$_/rlwrap", split ':', $ENV{PATH}) {
    #     warn "Sepia::ReadLine: Falling back to rlwrap.\n";
    } else {
        warn "Sepia::ReadLine: No completion with $rl.\n";
    }
    $Sepia::READLINE = sub { $TERM->readline(Sepia::prompt()) };
    goto &Sepia::repl;
}

1;