using UnityEngine;

/// <summary>
/// GAME 1303 Tier 1 — Touch to set the respawn point.
///
/// SETUP
///  - Empty GameObject with a Collider2D set to Is Trigger, plus this script.
///  - Optionally give it a SpriteRenderer (flag/lantern) and two sprites for
///    inactive/active. Optionally an AudioSource for a "checkpoint" chime.
///  - Player must be tagged "Player".
///  - Place the first checkpoint at the level start (or let RespawnManager use the
///    player's starting position — it does that automatically).
/// </summary>
[RequireComponent(typeof(Collider2D))]
public class Checkpoint : MonoBehaviour
{
    [Header("Visuals (optional)")]
    public SpriteRenderer spriteRenderer;
    public Sprite inactiveSprite;
    public Sprite activeSprite;
    public AudioClip activateSound;

    [Tooltip("Where the player appears. Leave empty to use this object's position.")]
    public Transform spawnPoint;

    public bool IsActive { get; private set; }
    public Vector3 SpawnPosition => spawnPoint != null ? spawnPoint.position : transform.position;

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

    void OnTriggerEnter2D(Collider2D other)
    {
        if (IsActive || !other.CompareTag("Player")) return;
        RespawnManager.Instance?.SetCheckpoint(this);
    }

    public void Activate()
    {
        IsActive = true;
        if (spriteRenderer != null && activeSprite != null) spriteRenderer.sprite = activeSprite;
        if (activateSound != null) AudioManager.Instance?.PlaySFX(activateSound);
    }

    public void Deactivate()
    {
        IsActive = false;
        if (spriteRenderer != null && inactiveSprite != null) spriteRenderer.sprite = inactiveSprite;
    }
}