package common.model;

public enum Transforms {
    DEFAULT(
		Transform.IDENTITY, 
		Transform.IDENTITY, 
		Transform.IDENTITY, 
		Transform.IDENTITY
    ),
	ANVIL(
		new Transform(10.0f, -45.0f, 170.0f, 0.25f, 1.5f, -2.5f, 0.375f, 0.375f, 0.375f),
		Transform.IDENTITY,
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	BLOCK(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 1.5f, -2.75f, 0.375f, 0.375f, 0.375f),
		Transform.IDENTITY,
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	ITEM(
		new Transform(-90.0f, 0.0f, 0.0f, 0.0f, 1.0f, -3.0f, 0.55f, 0.55f, 0.55f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	TOOL_FLIP(
		new Transform(180.0f, 90.0f, -35.0f, 0.0f, 0.0f, -3.5f, 0.85f, 0.85f, 0.85f),
		new Transform(0.0f, 45.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	TOOL(
		new Transform(0.0f, 90.0f, -35.0f, 0.0f, 1.25f, -3.5f, 0.85f, 0.85f, 0.85f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	OFFSET2(
		new Transform(-90.0f, 0.0f, 0.0f, 0.0f, 1.0f, -2.25f, 0.55f, 0.55f, 0.55f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	LAYER(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 0.25f, -2.75f, 0.375f, 0.375f, 0.375f),
		new Transform(0.0f, 0.0f, 0.0f, 0.0f, 5.25f, 0.0f, 1.0f, 1.0f, 1.0f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	DICE(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 1.5f, -1.75f, 0.15f, 0.15f, 0.15f),
		new Transform(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.4f, 0.4f, 0.4f),
		new Transform(135.0f, -55.0f, 180.0f, 0.0f, 0.0f, 0.0f, 1.1f, 1.1f, 1.1f),
		new Transform(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.4f, 0.4f, 0.4f)
	),
	STAIRS(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 1.5f, -2.75f, 0.375f, 0.375f, 0.375f),
		Transform.IDENTITY,
		new Transform(0.0f, 180.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f),
		Transform.IDENTITY
	),
	OFFSET1(
		new Transform(-90.0f, 0.0f, 0.0f, 0.0f, 1.0f, -2.5f, 0.55f, 0.55f, 0.55f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	GATE(
		new Transform(0.0f, -90.0f, 170.0f, 0.0f, 1.5f, -2.75f, 0.375f, 0.375f, 0.375f),
		new Transform(0.0f, 90.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	NUGGET(
		new Transform(-90.0f, 0.0f, 0.0f, 0.0f, 1.0f, -2.0f, 0.55f, 0.55f, 0.55f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	SKULL(
		new Transform(180.0f, -45.0f, 0.0f, 0.0f, 1.0f, -2.5f, 0.25f, 0.25f, 0.25f),
		new Transform(0.0f, -180.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.55f, 0.55f, 0.55f),
		new Transform(0.0f, 180.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.7f, 0.7f, 0.7f),
		Transform.IDENTITY
	),
	BUTTON(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 1.0f, -1.75f, 0.375f, 0.375f, 0.375f),
		Transform.IDENTITY,
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	RANGED(
		new Transform(5.0f, 80.0f, -45.0f, 0.75f, 0.0f, 0.25f, 1.0f, 1.0f, 1.0f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	BANNER(
		new Transform(0.0f, 90.0f, -90.0f, 0.0f, 0.0f, -4.0f, 0.5f, 0.5f, 0.5f),
		new Transform(0.0f, 225.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f),
		new Transform(0.0f, -65.0f, 0.0f, 0.0f, -3.0f, 0.0f, 0.85f, 0.85f, 0.85f),
		Transform.IDENTITY
	),
	FENCE(
		new Transform(0.0f, 0.0f, 180.0f, 0.0f, 1.5f, -2.75f, 0.375f, 0.375f, 0.375f),
		Transform.IDENTITY,
		new Transform(0.0f, 90.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f),
		Transform.IDENTITY
	),
	FLAT(
		new Transform(10.0f, -45.0f, 170.0f, 0.0f, 0.25f, -2.75f, 0.375f, 0.375f, 0.375f),
		new Transform(0.0f, 0.0f, 0.0f, 0.0f, 5.0f, 0.0f, 1.0f, 1.0f, 1.0f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	ROD(
		new Transform(0.0f, 90.0f, -35.0f, 0.0f, 0.75f, -3.5f, 0.85f, 0.85f, 0.85f),
		new Transform(0.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	),
	KEY(
		new Transform(0.0f, 270.0f, -35.0f, 0.0f, 1.25f, -3.5f, 0.85f, 0.85f, 0.85f),
		new Transform(180.0f, -135.0f, 25.0f, 0.0f, 4.0f, 2.0f, 1.7f, 1.7f, 1.7f),
		Transform.IDENTITY,
		Transform.IDENTITY
	);

    public static enum Camera {
        NONE,
        THIRD_PERSON,
        FIRST_PERSON,
        GUI,
        GROUND;
    }

	public final Transform third;
    public final Transform first;
    public final Transform gui;
    public final Transform ground;

	private Transforms(Transform third, Transform first, Transform gui, Transform ground) {
		this.third = third;
		this.first = first;
		this.gui = gui;
		this.ground = ground;
	}

	public Transform get(Camera type) {
		switch(type) {
			case THIRD_PERSON:
				return this.third;
			case FIRST_PERSON:
				return this.first;
			case GUI:
				return this.gui;
			case GROUND:
				return this.ground;
			default:
				return Transform.IDENTITY;
		}
	}
}
