/*
 * Derived from Epic Fight (https://github.com/Epic-Fight/epicfight)
 * by the Epic Fight Team, licensed under GPLv3.
 * Modifications © 2026 TiedUp! Remake Contributors, distributed under GPLv3.
 */

package com.tiedup.remake.rig.anim.types;

import net.minecraft.world.InteractionHand;

import com.tiedup.remake.rig.armature.Armature;
import com.tiedup.remake.rig.asset.AssetAccessor;

/**
 * RIG stub. Upstream EF : AttackAnimation = système d'attaque combat (570L,
 * Phase timings, hitboxes, damage source, attack events, colliders). 100%
 * combat, strippé en stub minimal pour TiedUp.
 *
 * <p>On conserve :</p>
 * <ul>
 *   <li>Le type {@code AttackAnimation} pour les {@code instanceof} dans
 *       {@link com.tiedup.remake.rig.asset.JsonAssetLoader}:584</li>
 *   <li>Le field {@code phases} (liste vide) pour la boucle d'itération
 *       en JsonAssetLoader:591</li>
 *   <li>La classe interne {@link Phase} avec un {@code getColliders()}
 *       no-op pour JsonAssetLoader:592</li>
 * </ul>
 */
public class AttackAnimation extends ActionAnimation {

	/**
	 * Liste des phases d'attaque. Toujours vide en TiedUp — on ne joue
	 * jamais d'animation attaque. Mais le field doit exister pour que
	 * JsonAssetLoader.java ligne 591 puisse itérer dessus sans NPE.
	 *
	 * <p>Type {@code Phase[]} (et non {@code List<Phase>}) pour s'aligner
	 * sur la signature upstream EF — facilite le re-port de fixes EF.</p>
	 */
	public final Phase[] phases = new Phase[0];

	public AttackAnimation(float transitionTime, boolean isRepeat, String registryName, AssetAccessor<? extends Armature> armature) {
		super(transitionTime, isRepeat, registryName, armature);
	}

	public AttackAnimation(boolean isRepeat, String registryName, AssetAccessor<? extends Armature> armature) {
		super(isRepeat, registryName, armature);
	}

	/**
	 * Stub — MoveCoordFunctions appelle ça pour calculer la reach mid-anim.
	 * On retourne toujours une Phase neutre (mainHand, pas de colliders),
	 * donc le reach retombe sur {@code entitypatch.getReach(MAIN_HAND)}.
	 */
	public Phase getPhaseByTime(float elapsedTime) {
		return new Phase();
	}

	/**
	 * Phase d'attaque. Stub pour satisfaire {@code phase.getColliders()}
	 * en JsonAssetLoader + {@code phase.hand} en MoveCoordFunctions.
	 */
	public static class Phase {
		public final InteractionHand hand = InteractionHand.MAIN_HAND;

		public JointColliderPair[] getColliders() {
			return new JointColliderPair[0];
		}
	}

	/**
	 * Stub — (Joint, Collider) pair pour les hitboxes combat. Non utilisé
	 * en TiedUp, juste un placeholder typé pour que JsonAssetLoader:592 compile.
	 */
	public static class JointColliderPair {
		public com.tiedup.remake.rig.armature.Joint getFirst() {
			return null;
		}
	}
}
