package ic2.api.energy.tile;

/**
 * Tile entities which conduct energy pulses without buffering (mostly cables) have to implement this
 * interface.
 *
 * See ic2/api/energy/usage.txt for an overall description of the energy net api.
 */
public interface IEnergyConductor extends IEnergyAcceptor, IEnergyEmitter {

    /**
     * Energy loss for the conductor in EU per block.
     *
     * @return Energy loss
     */
    double getConductionLoss();

    /**
     * Amount of energy the insulation will handle before shocking nearby players and mobs.
     *
     * @return Insulation energy absorption in EU
     */
    double getInsulationEnergyAbsorption();

    /**
     * Amount of energy the insulation will handle before it is destroyed.
     * Ensure that this value is greater than the insulation energy absorption + 64.
     *
     * @return Insulation-destroying energy in EU
     */
    double getInsulationBreakdownEnergy();

    /**
     * Amount of energy the conductor will handle before it melts.
     *
     * @return Conductor-destroying energy in EU
     */
    double getConductorBreakdownEnergy();

    /**
     * Remove the conductor's insulation if the insulation breakdown energy was exceeded.
     *
     * @see #getInsulationBreakdownEnergy()
     */
    void removeInsulation();

    /**
     * Remove the conductor if the conductor breakdown energy was exceeded.
     *
     * @see #getConductorBreakdownEnergy()
     */
    void removeConductor();
}

