package joshie.progression.criteria;
import joshie.progression.Progression;
import joshie.progression.api.criteria.IFilter;
import joshie.progression.api.criteria.IFilterProvider;
import joshie.progression.api.criteria.IRuleProvider;
import joshie.progression.api.special.DisplayMode;
import joshie.progression.api.special.ICustomDescription;
import joshie.progression.api.special.ICustomDisplayName;
import joshie.progression.api.special.ICustomWidth;
import java.util.UUID;
public class Filter implements IFilterProvider {
private final IFilter filter;
private final String unlocalised;
private final int color;
private IRuleProvider provider;
private UUID uuid;
//Dummy constructor for storing the default values
public Filter(IFilter filter, String unlocalised, int color) {
this.filter = filter;
this.unlocalised = unlocalised;
this.color = color;
this.filter.setProvider(this);
}
public Filter(IRuleProvider provider, UUID uuid, IFilter filter, String unlocalised, int color) {
this.provider = provider;
this.uuid = uuid;
this.filter = filter;
this.unlocalised = unlocalised;
this.color = color;
this.filter.setProvider(this);
}
@Override
public IRuleProvider getMaster() {
return provider;
}
@Override
public IFilter getProvided() {
return filter;
}
@Override
public String getUnlocalisedName() {
return unlocalised;
}
@Override
public int getColor() {
return color;
}
@Override
public String getLocalisedName() {
return filter instanceof ICustomDisplayName ? ((ICustomDisplayName)filter).getDisplayName() : Progression.translate(getUnlocalisedName());
}
@Override
public String getDescription() {
return filter instanceof ICustomDescription ? ((ICustomDescription)filter).getDescription() : Progression.format(getUnlocalisedName() + ".description");
}
@Override
public int getWidth(DisplayMode mode) {
return filter instanceof ICustomWidth ? ((ICustomWidth)filter).getWidth(mode) : 100;
}
@Override
public UUID getUniqueID() {
if (uuid == null) {
uuid = UUID.randomUUID();
}
return uuid;
}
@Override
public boolean isVisible() {
return true;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof IFilterProvider)) return false;
IFilterProvider that = (IFilterProvider) o;
return getUniqueID() != null ? getUniqueID().equals(that.getUniqueID()) : that.getUniqueID() == null;
}
@Override
public int hashCode() {
return getUniqueID() != null ? getUniqueID().hashCode() : 0;
}
}