// Path: src/pinnacle/api/enums/BET_TYPE.java
// public enum BET_TYPE {
// 
// 	MONEYLINE,
// 	TEAM_TOTAL_POINTS,
// 	SPREAD,
// 	TOTAL_POINTS,
// 	UNDEFINED;
// 
// 	public String toAPI () {
// 		return this.name();
// 	}
// 	
// 	public static BET_TYPE fromAPI (String text) {
// 		try {
// 			return BET_TYPE.valueOf(text);
// 		} catch (IllegalArgumentException e) {
// 			return BET_TYPE.UNDEFINED;
// 		}
// 	}
// }
// 
// Path: src/pinnacle/api/enums/LEG_BET_TYPE.java
// public enum LEG_BET_TYPE {
// 
// 	MONEYLINE,
// 	SPREAD  ,
// 	TOTAL_POINTS,
// 	UNDEFINED;
// 
// 	public String toAPI () {
// 		return this.name();
// 	}
// 	
// 	public static LEG_BET_TYPE fromAPI (String text) {
// 		try {
// 			return LEG_BET_TYPE.valueOf(text);
// 		} catch (IllegalArgumentException e) {
// 			return LEG_BET_TYPE.UNDEFINED;
// 		}
// 	}
// }
// 
// Path: src/pinnacle/api/enums/TEAM_TYPE.java
// public enum TEAM_TYPE {
// 
// 	DRAW("Draw"),
// 	TEAM_1("Team1"),
// 	TEAM_2("Team2"),
// 	UNDEFINED("undefined");
// 
// 	private final String value;
// 	
// 	private TEAM_TYPE (final String value) {
// 		this.value = value;
// 	}
// 	
// 	public String toAPI () {
// 		return this.value;
// 	}
// 	
// 	public static TEAM_TYPE fromAPI (String value) {
// 		return Arrays.stream(TEAM_TYPE.values())
// 		             .filter(e -> e.value.equals(value))
// 		             .findAny()
// 		             .orElse(TEAM_TYPE.UNDEFINED);
// 	}
// }


import java.time.ZonedDateTime;
import pinnacle.api.enums.BET_TYPE;
import pinnacle.api.enums.LEG_BET_TYPE;
import pinnacle.api.enums.TEAM_TYPE;
		if (type == LEG_BET_TYPE.SPREAD || type == LEG_BET_TYPE.MONEYLINE) {
			validator.addRequiredKey("team");
		}
		if (type == LEG_BET_TYPE.TOTAL_POINTS) {
			validator.addRequiredKey("side");
		}
		if (type == LEG_BET_TYPE.SPREAD || type == LEG_BET_TYPE.TOTAL_POINTS) {
			validator.addRequiredKey("handicap");
		}
		validator.validateKeys();
	}

	static void toGetTeaserLines(Parameter parameter) throws PinnacleException {
		for (Parameter leg : parameter.legs()) {
			validateLegToGetTeaserLines(leg);
		}
		Validator validator = new Validator(parameter);
		validator.addRequiredKey("teaserId");
		validator.addRequiredKey("oddsFormat");
		validator.validateKeys();
	}

	private static void validateLegToGetTeaserLines(Parameter parameter) throws PinnacleException {
		Validator validator = new Validator(parameter);
		validator.addRequiredKey("legId");
		validator.addRequiredKey("eventId");
		validator.addRequiredKey("betType");
		BET_TYPE betType = BET_TYPE.fromAPI((String) validator.getValue("betType"));
		if (betType == BET_TYPE.SPREAD) {
			validator.addRequiredKey("team");
// Path: src/pinnacle/api/enums/BET_TYPE.java
// public enum BET_TYPE {
// 
// 	MONEYLINE,
// 	TEAM_TOTAL_POINTS,
// 	SPREAD,
// 	TOTAL_POINTS,
// 	UNDEFINED;
// 
// 	public String toAPI () {
// 		return this.name();
// 	}
// 	
// 	public static BET_TYPE fromAPI (String text) {
// 		try {
// 			return BET_TYPE.valueOf(text);
// 		} catch (IllegalArgumentException e) {
// 			return BET_TYPE.UNDEFINED;
// 		}
// 	}
// }
// 
// Path: src/pinnacle/api/enums/LEG_BET_TYPE.java
// public enum LEG_BET_TYPE {
// 
// 	MONEYLINE,
// 	SPREAD  ,
// 	TOTAL_POINTS,
// 	UNDEFINED;
// 
// 	public String toAPI () {
// 		return this.name();
// 	}
// 	
// 	public static LEG_BET_TYPE fromAPI (String text) {
// 		try {
// 			return LEG_BET_TYPE.valueOf(text);
// 		} catch (IllegalArgumentException e) {
// 			return LEG_BET_TYPE.UNDEFINED;
// 		}
// 	}
// }
// 
// Path: src/pinnacle/api/enums/TEAM_TYPE.java
// public enum TEAM_TYPE {
// 
// 	DRAW("Draw"),
// 	TEAM_1("Team1"),
// 	TEAM_2("Team2"),
// 	UNDEFINED("undefined");
// 
// 	private final String value;
// 	
// 	private TEAM_TYPE (final String value) {
// 		this.value = value;
// 	}
// 	
// 	public String toAPI () {
// 		return this.value;
// 	}
// 	
// 	public static TEAM_TYPE fromAPI (String value) {
// 		return Arrays.stream(TEAM_TYPE.values())
// 		             .filter(e -> e.value.equals(value))
// 		             .findAny()
// 		             .orElse(TEAM_TYPE.UNDEFINED);
// 	}
// }


// Path: src/pinnacle/api/Validators.java
import java.time.ZonedDateTime;
import pinnacle.api.enums.BET_TYPE;
import pinnacle.api.enums.LEG_BET_TYPE;
import pinnacle.api.enums.TEAM_TYPE;

		if (type == LEG_BET_TYPE.SPREAD || type == LEG_BET_TYPE.MONEYLINE) {
			validator.addRequiredKey("team");
		}
		if (type == LEG_BET_TYPE.TOTAL_POINTS) {
			validator.addRequiredKey("side");
		}
		if (type == LEG_BET_TYPE.SPREAD || type == LEG_BET_TYPE.TOTAL_POINTS) {
			validator.addRequiredKey("handicap");
		}
		validator.validateKeys();
	}

	static void toGetTeaserLines(Parameter parameter) throws PinnacleException {
		for (Parameter leg : parameter.legs()) {
			validateLegToGetTeaserLines(leg);
		}
		Validator validator = new Validator(parameter);
		validator.addRequiredKey("teaserId");
		validator.addRequiredKey("oddsFormat");
		validator.validateKeys();
	}

	private static void validateLegToGetTeaserLines(Parameter parameter) throws PinnacleException {
		Validator validator = new Validator(parameter);
		validator.addRequiredKey("legId");
		validator.addRequiredKey("eventId");
		validator.addRequiredKey("betType");
		BET_TYPE betType = BET_TYPE.fromAPI((String) validator.getValue("betType"));
		if (betType == BET_TYPE.SPREAD) {
			validator.addRequiredKey("team");
			TEAM_TYPE teamType = TEAM_TYPE.fromAPI((String) validator.getValue("team"));