// 
// Decompiled by Procyon v0.6.0
// 

package org.jline.reader.impl.completer;

import java.util.List;
import org.jline.reader.ParsedLine;
import org.jline.reader.LineReader;
import java.util.Iterator;
import org.jline.utils.AttributedString;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Supplier;
import org.jline.reader.Candidate;
import java.util.Collection;
import org.jline.reader.Completer;

public class StringsCompleter implements Completer
{
    protected Collection<Candidate> candidates;
    protected Supplier<Collection<String>> stringsSupplier;
    
    public StringsCompleter() {
        this((Collection<Candidate>)Collections.emptyList());
    }
    
    public StringsCompleter(final Supplier<Collection<String>> stringsSupplier) {
        assert stringsSupplier != null;
        this.candidates = null;
        this.stringsSupplier = stringsSupplier;
    }
    
    public StringsCompleter(final String... strings) {
        this(Arrays.asList(strings));
    }
    
    public StringsCompleter(final Iterable<String> strings) {
        assert strings != null;
        this.candidates = new ArrayList<Candidate>();
        for (final String string : strings) {
            this.candidates.add(new Candidate(AttributedString.stripAnsi(string), string, null, null, null, null, true));
        }
    }
    
    public StringsCompleter(final Candidate... candidates) {
        this(Arrays.asList(candidates));
    }
    
    public StringsCompleter(final Collection<Candidate> candidates) {
        assert candidates != null;
        this.candidates = new ArrayList<Candidate>(candidates);
    }
    
    @Override
    public void complete(final LineReader reader, final ParsedLine commandLine, final List<Candidate> candidates) {
        assert commandLine != null;
        assert candidates != null;
        if (this.candidates != null) {
            candidates.addAll(this.candidates);
        }
        else {
            for (final String string : this.stringsSupplier.get()) {
                candidates.add(new Candidate(AttributedString.stripAnsi(string), string, null, null, null, null, true));
            }
        }
    }
    
    @Override
    public String toString() {
        final String value = (this.candidates != null) ? this.candidates.toString() : ("{" + this.stringsSupplier.toString() + "}");
        return "StringsCompleter" + value;
    }
}
