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

import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

/**
 * Patch spécifique au joueur local (self). Override
 * {@link #overrideRender()} pour gérer le cas first-person :
 *
 * <ul>
 *   <li><b>First-person (F5 = first)</b> : retourne {@code false} — on laisse
 *       le rendu vanilla Minecraft prendre la main (bras en FP, item held,
 *       overlay mains). Rendre le biped TiedUp en FP donnerait une vue
 *       depuis l'intérieur du mesh, illisible.</li>
 *   <li><b>Third-person (F5 = third, either view)</b> ou tout autre cas :
 *       retourne {@code true} — le renderer RIG patched prend la main et
 *       dessine le biped TiedUp comme pour les autres players.</li>
 * </ul>
 *
 * <p><b>Pourquoi la check {@code entity == Minecraft.getInstance().player}</b> :
 * {@link LocalPlayerPatch} est attaché uniquement au LocalPlayer (cf.
 * {@link EntityPatchProvider#registerEntityPatchesClient()}), donc en pratique
 * {@code this.original == Minecraft.getInstance().player} toujours. Le check
 * est une ceinture-bretelles au cas où le dispatcher change un jour pour
 * attacher ce patch à autre chose (très improbable).</p>
 *
 * <p>Pattern EF équivalent : {@code LocalPlayerPatch.java:143-152} —
 * même logique mais EF ajoute un toggle {@code ClientConfig.enableAnimatedFirstPersonModel}
 * pour ceux qui veulent le biped rendu même en FP. TiedUp peut l'ajouter
 * plus tard si demande gameplay, mais par défaut FP = vanilla.</p>
 *
 * <p>Hooks first-person hide specific bondage items (wrap / latex_sack /
 * blindfold = vision obstruée) → Phase 3 via
 * {@link ClientPlayerPatch#isFirstPersonHidden()} (V3-REW-01).</p>
 */
@OnlyIn(Dist.CLIENT)
public class LocalPlayerPatch extends ClientPlayerPatch<LocalPlayer> {

    /**
     * @return {@code false} si on est en first-person sur soi-même (laisse
     *         rendre le vanilla), {@code true} dans tous les autres cas.
     */
    @Override
    public boolean overrideRender() {
        Minecraft mc = Minecraft.getInstance();

        // mc.player peut être null durant un rejoin (~1 tick entre
        // disconnect et respawn). Dans ce cas pas de FP à gérer, on tombe
        // sur le comportement parent (true).
        if (mc.player != null && this.original == mc.player) {
            if (mc.options.getCameraType().isFirstPerson()) {
                return false;
            }
        }

        return super.overrideRender();
    }
}
