using System;
using UnityEngine;
using Wizard.Battle.View;
using Wizard.Battle.View.Vfx;

namespace Wizard.Battle.Mulligan;

public class PlayerMulliganView : MulliganViewBase
{
	private IPlayerView m_PlayerBattleView;

	public event Func<VfxBase> OnMulliganDragSuccess;

	public PlayerMulliganView(MulliganInfoControl mlgInfoCtrl, IPlayerView view)
		: base(mlgInfoCtrl)
	{
		m_PlayerBattleView = view;
		m_MlgUI.InitMulliganInfo();
		m_MlgUI.OnTimeUp += OnTimeUp;
	}

	public void DragCardStart(BattleCardBase card)
	{
		m_PlayerBattleView.MoveCardStart(card, isEffectAndSoundOn: false);
	}

	public void DragCard(BattleCardBase card, Vector3 Pos)
	{
		m_PlayerBattleView.MoveCard(card, Pos);
	}

	public void DragCardStop(BattleCardBase card)
	{
		m_PlayerBattleView.CardMoveEffectSwitch(on: false);
		GameMgr.GetIns().GetSoundMgr().StopSe(Se.TYPE.SYS_DRAG_SLIDE);
		card.SetOnMove(move: false);
	}

	public override SequentialVfxPlayer MoveCardToStaticPosition(BattleCardBase card, int posIndex, bool isAbandon)
	{
		VfxBase vfx = NullVfx.GetInstance();
		if (isAbandon)
		{
			vfx = this.OnMulliganDragSuccess.GetAllFuncVfxResults();
		}
		SequentialVfxPlayer sequentialVfxPlayer = base.MoveCardToStaticPosition(card, posIndex, isAbandon);
		sequentialVfxPlayer.Register(InstantVfx.Create(delegate
		{
			DragCardStop(card);
			if (isAbandon)
			{
				m_MlgUI.SetExchangeMarkPlayer(posIndex, on: true);
			}
		}));
		sequentialVfxPlayer.Register(vfx);
		return sequentialVfxPlayer;
	}

	public void ShowCardDetail(BattleCardBase card)
	{
		bool flag = !GameMgr.GetIns().IsWatchBattle && Mathf.Approximately(card.BattleCardView.Transform.localPosition.x, 0f);
		m_PlayerBattleView.SetDetailScreenPosition(!flag && _IsDetailScreenRight());
		m_PlayerBattleView.ShowDetailPanel(null, null, card, DetailPanelControl.ShowRequest.MULLIGAN);
	}

	private bool _IsDetailScreenRight()
	{
		if (InputMgr.ShowDetailLeftAndRight || GameMgr.GetIns().IsWatchBattle)
		{
			return Input.mousePosition.x < (float)Screen.width / 2f;
		}
		return false;
	}

	public void ShutDownCardDetail()
	{
		m_PlayerBattleView.HideDetailPanel();
	}

	public RaycastHit[] ConvertMousePositionToRayCastHits(Vector3 position)
	{
		return m_MlgUI.GetRaycastHitFromPosition(position);
	}

	public RaycastHit[] ConvertMousePositionToFrontUIRaycastHits(Vector3 position)
	{
		return m_MlgUI.Get2DRaycastHitFromPosition(position);
	}

	public Vector3 GetWorldPointInMulliganUICamera(Vector3 position)
	{
		return m_MlgUI.ScreenToWorldPoint3D(position);
	}

	private VfxBase OnTimeUp()
	{
		return InstantVfx.Create(ShutDownCardDetail);
	}

	protected override GameObject GetMulliganUIKeepZone()
	{
		return m_MlgUI.GetKeepZonePlayer().gameObject;
	}

	protected override GameObject GetMulliganUIAbandonZone()
	{
		return m_MlgUI.GetAbandonZonePlayer().gameObject;
	}

	public override void HideMulliganUIAbandonZone()
	{
		m_MlgUI.HideMulliganChangeUI();
	}

	public void SelectEffectOn(BattleCardBase targetCard)
	{
		m_PlayerBattleView.DetailPanelSelectEffectOff();
		m_PlayerBattleView.DetailPanelSelectEffectOn(targetCard, DetailPanelControl.ShowRequest.MULLIGAN);
	}

	public void SelectEffectOff()
	{
		m_PlayerBattleView.DetailPanelSelectEffectOff();
	}
}
