package io.dashbase.clue.commands;

import io.dashbase.clue.ClueContext;
import io.dashbase.clue.LuceneContext;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.Namespace;
import org.apache.lucene.index.IndexWriter;

import java.io.PrintStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class DeleteUserCommitData extends ClueCommand {

	private final LuceneContext luceneContext;
	public DeleteUserCommitData(LuceneContext ctx) {
		super(ctx);
		this.luceneContext = ctx;
	}

	@Override
	public String getName() {
		return "deletecommitdata";
	}

	@Override
	public String help() {
		return "Deletes user commit data by key";
	}

	@Override
	protected ArgumentParser buildParser(ArgumentParser parser) {
		parser.addArgument("-k", "--key").required(true).help("commit data key");
		return parser;
	}

	@Override
	public void execute(Namespace args, PrintStream out) throws Exception {
		IndexWriter writer = luceneContext.getIndexWriter();
		if (writer != null) {
			String key = args.get("key");
			Iterable<Map.Entry<String, String>> commitData = writer.getLiveCommitData();
			List<Map.Entry<String, String>> commitList = new LinkedList<>();
			for (Map.Entry<String, String> dataEntry : commitData) {
				if (!dataEntry.equals(key)) {
					commitList.add(dataEntry);
				}
			}
		    if (commitList.size() > 0) {
			  writer.setLiveCommitData(commitList);
			  writer.commit();
				luceneContext.refreshReader();
			  out.println("commit data: " + key +" removed.");
		    } else {
			  out.println("no commit data found, no action taken");
		    }
		} else {
			out.println("unable to open writer, index is in readonly mode");
		}
	}
}