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;
    public bool followTarget;
    public bool damageFollowingTarget;

    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>();

            SetupValues(user, userTag);

            networkedAreaOfEffectOverTime.Init();
            return;
        }


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

        networkedAreaOfEffectOverTime = instantiatedArea.GetComponent<NetworkedAreaOfEffectOverTime>();

        SetupValues(user, userTag);

        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>();

        SetupValues(user, userTag);

        networkedAreaOfEffectOverTime.Init();
    }

    public override void Execute(PhotonView user, Taggable userTag, Transform target)
    {
        base.Execute(user, userTag, target);

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

        networkedAreaOfEffectOverTime = instantiatedArea.GetComponent<NetworkedAreaOfEffectOverTime>();

        SetupValues(user, userTag);

        networkedAreaOfEffectOverTime.Init(target);
    }

    private void SetupValues(PhotonView user, Taggable userTag)
    {
        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.followTarget = followTarget;
        networkedAreaOfEffectOverTime.damageFollowingTarget = damageFollowingTarget;
        networkedAreaOfEffectOverTime.canHitSelf = canHitSelf;
    }
}
