package eu.dnetlib.goldoa.domain;

import com.google.gwt.user.client.rpc.IsSerializable;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by antleb on 3/9/15.
 */
public class Eligibility implements IsSerializable {

	public enum Status implements IsSerializable {
		OK, IFFY, NONO;
	}

	public static final Eligibility OK = new Eligibility(Status.OK);

	private String[] messages;
	private Status status;

	public Eligibility() {
		messages = new String[0];
		status = Status.OK;
	}

	public Eligibility(Status status, String... messages) {
		this.messages = messages;
		this.status = status;
	}

	public Eligibility merge(Eligibility e) {
		this.status = merge(status, e.status);
		this.messages = merge(messages, e.messages);

		return this;
	}

	private Status merge(Status... statuses) {
		List<Status> list = Arrays.asList(statuses);

		if (list.contains(Status.NONO))
			return Status.NONO;
		else if (list.contains(Status.IFFY))
			return Status.IFFY;
		else
			return Status.OK;
	}

	private String[] merge(String[] messages1, String[] messages2) {
		Set<String> s = new HashSet<String>();

		s.addAll(Arrays.asList(messages1));
		s.addAll(Arrays.asList(messages2));

		return s.toArray(new String[s.size()]);
	}

	public String[] getMessages() {
		return messages;
	}

	public void setMessages(String[] messages) {
		this.messages = messages;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}
}
