// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.buildertools.tooloperations.transform;

import com.hypixel.hytale.protocol.packets.buildertools.BrushAxis;
import javax.annotation.Nonnull;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.math.Axis;

public class Mirror implements Transform
{
    public static final Transform X;
    public static final Transform Y;
    public static final Transform Z;
    private final Axis axis;
    
    private Mirror(final Axis axis) {
        this.axis = axis;
    }
    
    @Override
    public void apply(@Nonnull final Vector3i vector3i) {
        this.axis.flip(vector3i);
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "Mirror{axis=" + String.valueOf(this.axis);
    }
    
    public static Transform forAxis(final BrushAxis axis) {
        if (axis == BrushAxis.X) {
            return Mirror.X;
        }
        if (axis == BrushAxis.Y) {
            return Mirror.Y;
        }
        if (axis == BrushAxis.Z) {
            return Mirror.Z;
        }
        return Mirror.NONE;
    }
    
    public static Transform forDirection(@Nonnull final Vector3i direction) {
        return forDirection(direction, true);
    }
    
    public static Transform forDirection(@Nonnull final Vector3i direction, final boolean negativeY) {
        if (direction.getX() != 0) {
            return Mirror.X;
        }
        if (direction.getZ() != 0) {
            return Mirror.Z;
        }
        if (direction.getY() > 0) {
            return Mirror.Y;
        }
        if (direction.getY() < 0 && negativeY) {
            return Mirror.Y;
        }
        return Mirror.NONE;
    }
    
    static {
        X = new Mirror(Axis.X);
        Y = new Mirror(Axis.Y);
        Z = new Mirror(Axis.Z);
    }
}
