using RootMotion.FinalIK;
using UnityEngine;

public partial class FPlayer
{
    /// <summary>
    /// 把鱼线放手上
    /// </summary>
    /// <param name="lHandPoint"></param>
    /// <param name="speed"></param>
    public bool PutLineToLeftHandHelper(Transform lHandPoint, float speed = 1f)
    {
        var pin = Gears.Rod.lineHandler.pinchController;
        if (!pin.isPinched)
        {
            pin.StartPinch(lHandPoint, speed);
        }

        if (pin.isPinched && Vector3.Distance(pin.transform.position, lHandPoint.position) < 0.1f)
        {
            return true;
        }

        return false;
    }


    public float GetPlayerHandPower()
    {
        if (!Gears.Rod)
        {
            return 1f;
        }

        if (!Gears.Rod.lineHandler)
        {
            return 1f;
        }

        float num2 = 0f;

        float value = 0.85f + num2;
        value = Mathf.Clamp(value, 0.5f, 1.2f);
        var num = (Gears.Rod.currentFish
            ? (1f - Mathf.Clamp01(Gears.Rod.currentLineTension * value))
            : (1f - Mathf.Clamp01(Gears.Rod.linelenghtDiferent * 0.2f)));
        return Mathf.Clamp(num, 0.2f, 1.2f);
    }

    private void MoveTowardsInteraction()
    {
        if (!interactionCCDIK)
        {
            return;
        }

        interactionCCDIK.solver.SetIKPositionWeight(Mathf.MoveTowards(interactionCCDIK.solver.IKPositionWeight,
            interactionTargetWeight, Time.deltaTime * 2f));
        if (Mathf.Approximately(interactionCCDIK.solver.IKPositionWeight, interactionTargetWeight))
        {
            if (interactionTargetWeight == 0f)
            {
                interactionCCDIK.solver.target = null;
                // SetHandArmature(lHandPlayer, armatureLHandPosterIdle);
            }

            interactionCCDIK = null;
        }
    }

    /// <summary>
    /// 控制手和线轴交互
    /// </summary>
    /// <param name="interactiveObject"></param>
    public void InteractiveMainHand(Transform interactiveObject)
    {
        if (!MainArm.TryGetComponent<CCDIK>(out var component))
        {
            return;
        }

        if (interactiveObject == null)
        {
            interactionTargetWeight = 0f;
            interactionCCDIK = component;
            if (Gears.Reel)
            {
                Data.isHandOnHandle = false;
            }

            return;
        }

        switch (interactiveObject.tag)
        {
            case "Reel":
                component.solver.target = Gears.Reel.reelAsset.handle;
                interactionTargetWeight = 1f;
                interactionCCDIK = component;
                if ((bool)Gears.Rod && (bool)Gears.Reel)
                {
                    Data.isHandOnHandle = true;
                }

                break;
            case "ReelUnlock":
                // SetHandArmature(lHandPlayer, Gears.Reel.armatureLHandUnlockPoster);
                // component.solver.target = Gears.Reel.reelAsset.koblagHandle;
                interactionTargetWeight = 1f;
                interactionCCDIK = component;
                if ((bool)Gears.Rod && (bool)Gears.Reel)
                {
                    Data.isHandOnHandle = false;
                }

                break;
        }
    }
}