use v5.28;
use utf8;
use Object::Pad;
class App::MPD::Feeder::WorkQueue;

use Log::Any qw($log);

has @queue;
has %present;

method add($key) {
    if ( exists $present{$key} ) {
        $log->trace("job '$key' already queued");
    }
    else {
        $present{$key} = undef;
        push @queue, $key;

        $log->trace("job '$key' queued");
    }
}

method next {
    my $item = shift @queue;

    if ( defined($item) ) {
        $log->trace("next job: '$item'");
        delete $present{$item};
    }
    else {
        $log->trace("job queue is empty");
    }

    return $item;
}

method clear {
    @queue   = ();
    %present = ();
    $log->trace('work queue cleared');
}

method has_jobs {
    $log->trace( "Queue jobs: " . scalar(@queue) );
    return scalar @queue;
}

1;
