using UnityEngine;

/// <summary>
/// GAME 1303 Tier 5 — Food knocked loose by a monster. Run over it to get it back before
/// a monster carries it off. Last Delivery.
///
/// SETUP
///  - Prefab: sprite + Rigidbody2D (Gravity 0, Linear Damping 3) + trigger Collider2D +
///    this script. Assign it as DeliveryObjective's Dropped Cargo Prefab.
///  - Despawn After: seconds before it's gone for good (0 = never). Blink Before Despawn
///    warns the player.
///  - Monsters can steal it too: give the monster a trigger and wire its collision to
///    Consume(), or leave it and let dropped food only be lost to the timer.
/// </summary>
[RequireComponent(typeof(Collider2D))]
public class DroppedCargo : MonoBehaviour
{
    public float despawnAfter = 8f;
    public float blinkBeforeDespawn = 3f;
    [Tooltip("Ignore the player for a moment so it isn't instantly re-collected.")]
    public float pickupDelay = 0.4f;

    private float age;
    private SpriteRenderer sr;

    void Reset() { GetComponent<Collider2D>().isTrigger = true; }

    void Awake() { sr = GetComponentInChildren<SpriteRenderer>(); }

    void Update()
    {
        age += Time.deltaTime;
        if (despawnAfter <= 0f) return;

        float remaining = despawnAfter - age;
        if (remaining <= 0f) { Destroy(gameObject); return; }
        if (sr != null && remaining < blinkBeforeDespawn)
            sr.enabled = Mathf.FloorToInt(remaining * 8f) % 2 == 0;
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (age < pickupDelay || !other.CompareTag("Player")) return;
        var cargo = other.GetComponentInParent<DeliveryObjective>();
        if (cargo == null) return;
        cargo.PickUpOne();
        Destroy(gameObject);
    }

    /// <summary>A monster made off with it.</summary>
    public void Consume() => Destroy(gameObject);
}