package com.tiedup.remake.entities.kidnapper.components;

import com.tiedup.remake.entities.KidnapperCollarConfig;
import com.tiedup.remake.entities.KidnapperJobManager;
import java.util.UUID;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.navigation.PathNavigation;
import net.minecraft.world.entity.ai.sensing.Sensing;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB;
import org.jetbrains.annotations.Nullable;

/**
 * Host interface for KidnapperTargetSelector callbacks.
 * Provides access to entity properties needed for target selection and validation.
 */
public interface ITargetHost {
    /**
     * Get the entity's level/world.
     */
    Level level();

    /**
     * Get the entity's sensing component for line-of-sight checks.
     */
    Sensing getSensing();

    /**
     * Get the entity's bounding box for area searches.
     */
    AABB getBoundingBox();

    /**
     * Calculate distance to another entity.
     */
    float distanceTo(LivingEntity entity);

    /**
     * Get the entity's UUID.
     */
    UUID getUUID();

    /**
     * Check if this kidnapper is tied up.
     */
    boolean isTiedUp();

    /**
     * Check if this kidnapper has captives.
     */
    boolean hasCaptives();

    /**
     * Check if waiting for a job to be completed.
     */
    boolean isWaitingForJobToBeCompleted();

    /**
     * Check if in "get out" / fleeing state.
     */
    boolean isGetOutState();

    /**
     * Check if kidnapping mode is enabled.
     */
    boolean isKidnappingModeEnabled();

    /**
     * Get the associated structure UUID for camp-linked kidnappers.
     */
    @Nullable
    UUID getAssociatedStructure();

    /**
     * Get the entity's navigation component.
     */
    PathNavigation getNavigation();

    /**
     * Get the aggression system for robbery immunity checks.
     */
    KidnapperAggressionSystem getAggressionSystem();

    /**
     * Get the job manager for worker UUID checks.
     */
    KidnapperJobManager getJobManager();

    /**
     * Get the collar config for kidnapping mode validation.
     */
    KidnapperCollarConfig getCollarConfig();
}
