package com.tiedup.remake.state;

/**
 * Union interface for entities that participate in the full restraint system.
 *
 * <p>Prefer using the narrowest sub-interface for your needs:</p>
 * <ul>
 *   <li>{@link IBondageState} — equipment, state checks, capture, identity (most common)</li>
 *   <li>{@link ICoercible} — shock, chloroform, tighten</li>
 *   <li>{@link ISaleable} — sale system</li>
 * </ul>
 *
 * <p>Use {@code IRestrainable} only when you genuinely need methods from multiple
 * branches (e.g., both bondage state AND coercion, or both bondage AND sale).</p>
 *
 * <p><b>Inheritance hierarchy:</b></p>
 * <pre>
 * IRestrainableEntity (base)
 *   +-- ICapturable extends IRestrainableEntity
 *   |     +-- IBondageState extends ICapturable
 *   +-- ICoercible extends IRestrainableEntity
 *
 * ISaleable (standalone)
 *
 * IRestrainable extends IBondageState, ICoercible, ISaleable
 * </pre>
 *
 * <p><b>Implementors:</b> PlayerBindState, DamselBondageManager,
 * MCAKidnappedAdapter</p>
 *
 * @see IRestrainableEntity
 * @see ICapturable
 * @see IBondageState
 * @see ICoercible
 * @see ISaleable
 * @see PlayerBindState
 */
public interface IRestrainable extends IBondageState, ICoercible, ISaleable {
    // Empty union body — all methods inherited from sub-interfaces.
}
