using UnityEngine;

public class WorldManager : MonoBehaviour
{
    [Header("Tilemap")]
    [SerializeField] private Pathfinder _pathfinder;

    [Header("NPC")]
    [SerializeField] private NPCManager _npcManager;

    [Header("Camera")]
    [SerializeField] private CameraController _cameraController;

    [Header("Language")]
    [SerializeField] private NPCData.Language _currentLanguage = NPCData.Language.EN;

    public static WorldManager Instance { get; private set; }
    public NPCData.Language CurrentLanguage => _currentLanguage;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        if (_cameraController != null && _pathfinder != null)
            _cameraController.SetMapBounds(_pathfinder.MapWorldBounds);
    }

    public void SetLanguage(NPCData.Language lang)
    {
        _currentLanguage = lang;
    }

    public void CycleLanguage()
    {
        int next = ((int)_currentLanguage + 1) % System.Enum.GetValues(typeof(NPCData.Language)).Length;
        _currentLanguage = (NPCData.Language)next;
    }

    public void RebuildPathfinder()
    {
        _pathfinder.Rebuild();
        if (_cameraController != null)
            _cameraController.SetMapBounds(_pathfinder.MapWorldBounds);
    }

    public void SetActiveMap(int index)
    {
        _pathfinder.SetActiveMap(index);
        _npcManager.Respawn();

        if (_cameraController != null)
        {
            // Update camera bounds
            _cameraController.SetMapBounds(_pathfinder.MapWorldBounds);

            // Move camera to map center
            var centerWorld = _pathfinder.TileToWorld(_pathfinder.MapCenter);
            var camPos = _cameraController.transform.position;
            camPos.x = centerWorld.x;
            camPos.y = centerWorld.y;
            _cameraController.transform.position = camPos;
        }
    }
}
