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

public abstract class CharacterBase : MonoBehaviour
{
    [Header("기본 능력치")]
    public string characterName;        // 이름
    public int maxHP = 100;             // 최대 체력
    public int currentHP;               // 현재 체력
    public float attackPower = 10f;     // 공격력
    public float defensePower = 5f;     // 방어력
    public float moveSpeed = 5f;        // 이동 속도

    public readonly float gravity = -9.81f;   // 중력

    [Header("상태 이상")]
    public List<StatusEffect> statusEffects = new List<StatusEffect>();
    
    public event Action OnDeath; // 사망 이벤트
    public event Action<CharacterBase> OnGetHit; // 피격 이벤트

    protected virtual void Start()
    {
        currentHP = maxHP;
    }

    public virtual void TakeDamage(float damage)
    {
        if (currentHP <= 0) return;
        
        float actualDamage = Mathf.Max(0, damage - defensePower);
        currentHP -= Mathf.RoundToInt(actualDamage);
        Debug.Log($"{characterName}이 {actualDamage}의 피해를 입었습니다. 현재 체력: {currentHP}");

        if (currentHP <= 0)
        {
            Die();
            return;
        }
        
        OnGetHit?.Invoke(this);
    }

    public virtual void Die()
    {
        Debug.Log($"{characterName}이 사망했습니다.");
        // TODO: 사망 처리
        OnDeath?.Invoke();
    }

    // 상태이상 추가 메서드
    public virtual void AddStatusEffect(StatusEffect effect)
    {
        statusEffects.Add(effect);
        // TODO: 상태이상 처리 로직 추가
    }
}

public abstract class StatusEffect
{
    // 받는 피해 증가
    // 주는 피해 감소
    // 느려짐
    // 기절
    // 넉백

    public string effectName;
    public float duration;

    public virtual void ApplyEffect(CharacterBase target) {}
    public virtual void RemoveEffect(CharacterBase target) {}
}