using UnityEngine;

// ============================================================================
// WeaponPickup
// ----------------------------------------------------------------------------
// 월드에 떨어진 무기. 플레이어가 트리거 영역에 들어오면 자동으로 인벤토리에 추가되고 사라짐.
//
// 두 가지 사용 패턴:
//   1) 씬에 미리 배치 → Inspector에서 _weapon 할당 → 자동 표시
//   2) 코드로 동적 스폰 → Initialize(WeaponData)로 무기 주입 (Enemy.HandleDeath)
// ============================================================================
[RequireComponent(typeof(Collider2D))]
[RequireComponent(typeof(SpriteRenderer))]
public class WeaponPickup : MonoBehaviour
{
    [SerializeField] private WeaponData _weapon;

    private SpriteRenderer _spriteRenderer;

    private void Awake()
    {
        _spriteRenderer = GetComponent<SpriteRenderer>();

        // 픽업은 물리 충돌 아닌 트리거. 플레이어가 통과하면서 줍게.
        Collider2D col = GetComponent<Collider2D>();
        col.isTrigger = true;

        ApplyVisual();
    }

    // 코드로 동적 스폰 시 호출. Enemy.HandleDeath에서 사용.
    public void Initialize(WeaponData weapon)
    {
        _weapon = weapon;
        ApplyVisual();
    }

    private void ApplyVisual()
    {
        if (_spriteRenderer == null || _weapon == null) return;
        if (_weapon.PickupSprite != null)
            _spriteRenderer.sprite = _weapon.PickupSprite;
    }

    // 플레이어가 트리거 영역에 진입 시 발화.
    // Player(또는 자식)에 PlayerWeaponInventory 컴포넌트가 있어야 픽업 됨.
    // 이미 보유 중이면 Pickup이 false 반환 → pickup 오브젝트 그대로 유지.
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (_weapon == null) return;

        PlayerWeaponInventory inventory = other.GetComponentInParent<PlayerWeaponInventory>();
        if (inventory == null) return;

        if (inventory.Pickup(_weapon))
            Destroy(gameObject);
    }
}
