/*
 * 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.phys.Vec3;

import com.tiedup.remake.rig.anim.AnimationVariables;
import com.tiedup.remake.rig.anim.AnimationVariables.IndependentAnimationVariableKey;
import com.tiedup.remake.rig.anim.property.AnimationProperty.ActionAnimationProperty;
import com.tiedup.remake.rig.armature.Armature;
import com.tiedup.remake.rig.asset.AssetAccessor;

/**
 * RIG stub. Upstream EF : ActionAnimation ajoute un système de COORD
 * TransformSheet pour les mouvements d'attaque en espace monde + des
 * packets sync serveur/client via {@code CPSyncPlayerAnimationPosition}.
 * Strippé pour TiedUp — garde juste l'API {@code addProperty} utilisée par
 * {@link com.tiedup.remake.rig.asset.JsonAssetLoader} (ligne 621).
 */
public class ActionAnimation extends MainFrameAnimation {

	// Variables indépendantes propagées à MoveCoordFunctions (position de départ
	// en coord monde + produit scalaire lookVec initial pour lerp anim→world).
	public static final IndependentAnimationVariableKey<Vec3> BEGINNING_LOCATION =
		AnimationVariables.independent((animator) -> animator.getEntityPatch().getOriginal().position(), true);
	public static final IndependentAnimationVariableKey<Float> INITIAL_LOOK_VEC_DOT =
		AnimationVariables.independent((animator) -> 1.0F, true);

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

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

	/**
	 * Ajoute une propriété action-specific (COORD TransformSheet typiquement).
	 * Version stub : no-op, juste pour que les refs JsonAssetLoader compilent.
	 */
	public <V> ActionAnimation addProperty(ActionAnimationProperty<V> property, V value) {
		return this;
	}

	/**
	 * Stub Phase 0 — LinkAnimation.modifyPose appelle ça pour zero-out X/Z de la
	 * Root joint en espace monde (empêche le sliding visuel pendant la transition
	 * vers une ActionAnimation sans keyframe "Coord"). Voir EF
	 * {@code yesman.epicfight.api.animation.types.ActionAnimation:209-222}.
	 *
	 * <p>Safe Phase 1 (idle/walk sont des StaticAnimation, pas ActionAnimation →
	 * jamais appelée). À re-implémenter Phase 2 dès qu'on introduit de vraies
	 * ActionAnimations bondage — sinon : sliding visible pendant transitionTime
	 * frames à chaque entrée dans l'action anim.</p>
	 */
	public void correctRootJoint(
		com.tiedup.remake.rig.anim.types.DynamicAnimation animation,
		com.tiedup.remake.rig.anim.Pose pose,
		com.tiedup.remake.rig.patch.LivingEntityPatch<?> entitypatch,
		float time,
		float partialTicks
	) {
		if (com.tiedup.remake.rig.TiedUpRigConstants.IS_DEV_ENV) {
			com.tiedup.remake.rig.TiedUpRigConstants.LOGGER.warn(
				"correctRootJoint no-op appelé (Phase 0 stub) — si ActionAnimation jouée, "
				+ "sliding visuel attendu. Voir docs/plans/rig/PHASE0_DEGRADATIONS.md D-07."
			);
		}
	}
}
