using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "AoEWithImpactEventAbility", menuName = "RiftMayhem/AbilitySystem/Abilities/Area of Effect With Impact Event Ability", order = 0)]
public class AreaOfEffectWithImpactEventAbility : AreaOfEffectAbility
{
    public float impactDelay;

    private NetworkedAreaOfEffectWithImpactEvent networkedAreaOfEffectWithImpactEvent;

    public override void Execute(PhotonView user, Taggable userTag)
    {
        user.GetComponent<Mana>().ChangeValue(-manaCost);

        if (spawnUnderUser)
        {
            instantiatedArea = PhotonNetwork.Instantiate("Abilities/" + aoePrefab.name, user.transform.position, Quaternion.identity);
            //instantiatedArea.transform.parent = user.transform;
            networkedAreaOfEffectWithImpactEvent = instantiatedArea.GetComponent<NetworkedAreaOfEffectWithImpactEvent>();

            networkedAreaOfEffectWithImpactEvent.owner = user;
            networkedAreaOfEffectWithImpactEvent.ownerTag = userTag;
            networkedAreaOfEffectWithImpactEvent.ability = this;
            networkedAreaOfEffectWithImpactEvent.radius = radius;
            networkedAreaOfEffectWithImpactEvent.telegraphDelay = telegraphDelay;
            networkedAreaOfEffectWithImpactEvent.lifeSpan = lifeSpan;
            networkedAreaOfEffectWithImpactEvent.canHitSelf = canHitSelf;
            networkedAreaOfEffectWithImpactEvent.impactDelay = impactDelay;

            networkedAreaOfEffectWithImpactEvent.Init();
            return;
        }

        instantiatedArea = PhotonNetwork.Instantiate("Abilities/" + aoePrefab.name, user.GetComponentInChildren<AoERayHitLocationSnapshotController>().aoeRayHitLocationSnapshot.position, Quaternion.identity);

        networkedAreaOfEffectWithImpactEvent = instantiatedArea.GetComponent<NetworkedAreaOfEffectWithImpactEvent>();

        networkedAreaOfEffectWithImpactEvent.owner = user;
        networkedAreaOfEffectWithImpactEvent.ownerTag = userTag;
        networkedAreaOfEffectWithImpactEvent.ability = this;
        networkedAreaOfEffectWithImpactEvent.radius = radius;
        networkedAreaOfEffectWithImpactEvent.telegraphDelay = telegraphDelay;
        networkedAreaOfEffectWithImpactEvent.lifeSpan = lifeSpan;
        networkedAreaOfEffectWithImpactEvent.canHitSelf = canHitSelf;
        networkedAreaOfEffectWithImpactEvent.impactDelay = impactDelay;


        networkedAreaOfEffectWithImpactEvent.Init();

    }

    public override void Execute(PhotonView user, Taggable userTag, Vector3 point)
    {
        user.GetComponent<Mana>().ChangeValue(-manaCost);

        instantiatedArea = PhotonNetwork.Instantiate("Abilities/" + aoePrefab.name, point, Quaternion.identity);

        networkedAreaOfEffectWithImpactEvent = instantiatedArea.GetComponent<NetworkedAreaOfEffectWithImpactEvent>();

        networkedAreaOfEffectWithImpactEvent.owner = user;
        networkedAreaOfEffectWithImpactEvent.ownerTag = userTag;
        networkedAreaOfEffectWithImpactEvent.ability = this;
        networkedAreaOfEffectWithImpactEvent.radius = radius;
        networkedAreaOfEffectWithImpactEvent.telegraphDelay = telegraphDelay;
        networkedAreaOfEffectWithImpactEvent.lifeSpan = lifeSpan;
        networkedAreaOfEffectWithImpactEvent.canHitSelf = canHitSelf;
        networkedAreaOfEffectWithImpactEvent.impactDelay = impactDelay;



        networkedAreaOfEffectWithImpactEvent.Init();
    }
}
