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

[CreateAssetMenu(fileName = "AoEOverTimeAbility", menuName = "RiftMayhem/AbilitySystem/Abilities/Area of Effect Over Time Ability", order = 0)]
public class AreaOfEffectOverTimeAbility : AreaOfEffectAbility
{
    public float duration;
    public bool followUser;

    private NetworkedAreaOfEffectOverTime networkedAreaOfEffectOverTime;

    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;
            networkedAreaOfEffectOverTime = instantiatedArea.GetComponent<NetworkedAreaOfEffectOverTime>();

            networkedAreaOfEffectOverTime.owner = user;
            networkedAreaOfEffectOverTime.ownerTag = userTag;
            networkedAreaOfEffectOverTime.ability = this;
            networkedAreaOfEffectOverTime.radius = radius;
            networkedAreaOfEffectOverTime.telegraphDelay = telegraphDelay;
            networkedAreaOfEffectOverTime.lifeSpan = lifeSpan;
            networkedAreaOfEffectOverTime.duration = duration;
            networkedAreaOfEffectOverTime.followUser = followUser;
            networkedAreaOfEffectOverTime.canHitSelf = canHitSelf;

            networkedAreaOfEffectOverTime.Init();
            return;
        }


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

        networkedAreaOfEffectOverTime = instantiatedArea.GetComponent<NetworkedAreaOfEffectOverTime>();

        networkedAreaOfEffectOverTime.owner = user;
        networkedAreaOfEffectOverTime.ownerTag = userTag;
        networkedAreaOfEffectOverTime.ability = this;
        networkedAreaOfEffectOverTime.radius = radius;
        networkedAreaOfEffectOverTime.telegraphDelay = telegraphDelay;
        networkedAreaOfEffectOverTime.lifeSpan = lifeSpan;
        networkedAreaOfEffectOverTime.duration = duration;
        networkedAreaOfEffectOverTime.followUser = followUser;
        networkedAreaOfEffectOverTime.canHitSelf = canHitSelf;

        networkedAreaOfEffectOverTime.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);

        networkedAreaOfEffectOverTime = instantiatedArea.GetComponent<NetworkedAreaOfEffectOverTime>();

        networkedAreaOfEffectOverTime.owner = user;
        networkedAreaOfEffectOverTime.ownerTag = userTag;
        networkedAreaOfEffectOverTime.ability = this;
        networkedAreaOfEffectOverTime.radius = radius;
        networkedAreaOfEffectOverTime.telegraphDelay = telegraphDelay;
        networkedAreaOfEffectOverTime.lifeSpan = lifeSpan;
        networkedAreaOfEffectOverTime.duration = duration;
        networkedAreaOfEffectOverTime.followUser = followUser;
        networkedAreaOfEffectOverTime.canHitSelf = canHitSelf;


        networkedAreaOfEffectOverTime.Init();
    }
}
