package gregtech.api.interfaces.metatileentity;

import net.minecraftforge.common.util.ForgeDirection;

/**
 * For pipes, wires, and other MetaTiles which need to be decided whether they should connect to the block at each side.
 */
public interface IConnectable {

    int NO_CONNECTION = 0b00000000;
    int CONNECTED_DOWN = 0b00000001;
    int CONNECTED_UP = 0b00000010;
    int CONNECTED_NORTH = 0b00000100;
    int CONNECTED_SOUTH = 0b00001000;
    int CONNECTED_WEST = 0b00010000;
    int CONNECTED_EAST = 0b00100000;
    int CONNECTED_ALL = 0b00111111;
    int HAS_FRESHFOAM = 0b01000000;
    int HAS_HARDENEDFOAM = 0b10000000;
    int HAS_FOAM = 0b11000000;

    /**
     * Try to connect to the Block at the specified side returns the connection state. Non-positive values for failed,
     * others for succeeded.
     */
    int connect(ForgeDirection side);

    /**
     * Try to disconnect to the Block at the specified side
     */
    void disconnect(ForgeDirection side);

    boolean isConnectedAtSide(ForgeDirection side);
}