using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class Projectile : MonoBehaviour
{
    [Header("Projectile")]
    [SerializeField]
    private float _speed = 5.0f;
    [SerializeField]
    private DirectionEnum _direction;

    private int _damage;
    private Entity _origin;
    private Vector2 _startPos;

    protected virtual void Start()
    {
        if (Direction == DirectionEnum.Left)
        {
            _speed = -_speed;
        }
        _startPos = new Vector2(_origin.transform.position.x, _origin.transform.position.y);
    }

    private void Update()
    {
        ApplyMovement();
        if (transform.position.x < -100.0f || transform.position.x > 100.0f)
        {
            Destroy(gameObject);
        }
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        HandleCollision(other);
    }

    protected virtual void ApplyEffects(Entity target) { }

    protected abstract void ApplyMovement();

    protected abstract void HandleCollision(Collider2D other);

    public float Speed { get => _speed; set => _speed = value; }
    public int Damage { get => _damage; set => _damage = value; }
    private DirectionEnum Direction { get => _direction; set => _direction = value; }
    public Entity Origin { get => _origin; set => _origin = value; }
    public Vector2 StartPos { get => _startPos; set => _startPos = value; }

    protected enum DirectionEnum
    {
        Right,
        Left
    }
}
