package de.robingrether.idisguise.disguise;

import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

import org.bukkit.DyeColor;

public class TropicalFishDisguise extends MobDisguise {
	
	private DyeColor bodyColor;
	private DyeColor patternColor;
	private Pattern pattern;
	
	public TropicalFishDisguise() {
		this(DyeColor.WHITE, DyeColor.RED, Pattern.CLAYFISH);
	}
	
	public TropicalFishDisguise(DyeColor bodyColor, DyeColor patternColor, Pattern pattern) {
		super(DisguiseType.TROPICAL_FISH);
		this.bodyColor = bodyColor;
		this.patternColor = patternColor;
		this.pattern = pattern;
	}
	
	public DyeColor getBodyColor() {
		return bodyColor;
	}
	
	public void setBodyColor(DyeColor bodyColor) {
		this.bodyColor = bodyColor;
	}
	
	public DyeColor getPatternColor() {
		return patternColor;
	}
	
	public void setPatternColor(DyeColor patternColor) {
		this.patternColor = patternColor;
	}
	
	public Pattern getPattern() {
		return pattern;
	}
	
	public void setPattern(Pattern pattern) {
		this.pattern = pattern;
	}
	
	public String toString() {
		return String.format("%s; body-color=%s; pattern-color=%s; pattern=%s", super.toString(),
				bodyColor.name().toLowerCase(Locale.ENGLISH).replace('_', '-'),
				patternColor.name().toLowerCase(Locale.ENGLISH).replace('_', '-'),
				pattern.name().toLowerCase(Locale.ENGLISH));
	}
	
	static {
		Set<String> parameterSuggestions = new HashSet<String>();
		for(DyeColor color : DyeColor.values()) {
			parameterSuggestions.add(color.name().toLowerCase(Locale.ENGLISH).replace('_', '-'));
		}
		Subtypes.registerParameterizedSubtype(TropicalFishDisguise.class, (disguise, parameter) -> disguise.setBodyColor(DyeColor.valueOf(parameter.toUpperCase(Locale.ENGLISH).replace('-', '_'))), "body-color", parameterSuggestions);
		Subtypes.registerParameterizedSubtype(TropicalFishDisguise.class, (disguise, parameter) -> disguise.setPatternColor(DyeColor.valueOf(parameter.toUpperCase(Locale.ENGLISH).replace('-', '_'))), "pattern-color", parameterSuggestions);
		
		parameterSuggestions = new HashSet<String>();
		for(Pattern pattern : Pattern.values()) {
			parameterSuggestions.add(pattern.name().toLowerCase(Locale.ENGLISH));
		}
		Subtypes.registerParameterizedSubtype(TropicalFishDisguise.class, (disguise, parameter) -> disguise.setPattern(Pattern.valueOf(parameter.toUpperCase(Locale.ENGLISH))), "pattern", parameterSuggestions);
	}
	
	public enum Pattern {
		
		KOB(0 << 8 | 0),
		SUNSTREAK(1 << 8 | 0),
		SNOOPER(2 << 8 | 0),
		DASHER(3 << 8 | 0),
		BRINELY(4 << 8 | 0),
		SPOTTY(5 << 8 | 0),
		FLOPPER(0 << 8 | 1),
		STRIPEY(1 << 8 | 1),
		GLITTER(2 << 8 | 1),
		BLOCKFISH(3 << 8 | 1),
		BETTY(4 << 8 | 1),
		CLAYFISH(5 << 8 | 1);
		
		private final int data;
		
		private Pattern(int data) {
			this.data = data;
		}
		
		public int getData() {
			return data;
		}
		
	}
	
}