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

import com.tiedup.remake.entities.EntityKidnapper;
import com.tiedup.remake.entities.KidnapperJobManager;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;

/**
 * Host interface for KidnapperDataSerializer callbacks.
 * Provides access to entity data and components for NBT persistence.
 */
public interface IDataSerializerHost {
    // ENTITY ACCESS

    /**
     * Get the entity instance.
     */
    EntityKidnapper getEntity();

    // ENTITY DATA ACCESS

    /**
     * Get entity data value.
     */
    <T> T getEntityData(EntityDataAccessor<T> accessor);

    /**
     * Set entity data value.
     */
    <T> void setEntityData(EntityDataAccessor<T> accessor, T value);

    // STATE FLAGS

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

    /**
     * Set "get out" state.
     */
    void setGetOutState(boolean state);

    // COMPONENT ACCESS

    /**
     * Get appearance manager.
     */
    KidnapperAppearance getAppearance();

    /**
     * Get aggression system.
     */
    KidnapperAggressionSystem getAggressionSystem();

    /**
     * Get captive manager.
     */
    KidnapperCaptiveManager getCaptiveManager();

    /**
     * Get state manager.
     */
    KidnapperStateManager getStateManager();

    /**
     * Get camp manager.
     */
    KidnapperCampManager getCampManager();

    /**
     * Get job manager.
     */
    KidnapperJobManager getJobManager();
}
