using Unity.Netcode;

public class MyNetworkManager : MonoBehaviour
{
    [Header("References")]
    [SerializeField] private SpawnManager spawnManager;
    [SerializeField] private GameObject playerPrefab;
    private void Start()
    {
        if (NetworkManager.Singleton == null)
        {
            Debug.LogError("No NetworkManager found in the scene!");
            return;
        }

      
        NetworkManager.Singleton.OnClientConnectedCallback += HandleClientConnected;

        // Only spawn the host player after the network is started
        NetworkManager.Singleton.OnServerStarted += () =>
        {
            if (NetworkManager.Singleton.IsHost)
            {
                SpawnPlayer(NetworkManager.Singleton.LocalClientId);
            }
        };
    }
    private void OnDestroy()
    {
        if (NetworkManager.Singleton != null)
            NetworkManager.Singleton.OnClientConnectedCallback -= HandleClientConnected;
    }
    private void HandleClientConnected(ulong clientId)
    {
        // Only server spawns players
        if (!NetworkManager.Singleton.IsServer) return;


        if (clientId == NetworkManager.Singleton.LocalClientId) return;

        SpawnPlayer(clientId);
    }
    private void SpawnPlayer(ulong clientId)
    {
        if (spawnManager == null || playerPrefab == null)
        {
            Debug.LogError("SpawnManager or PlayerPrefab not assigned!");
            return;
        }

        Vector3 spawnPos = spawnManager.GetNextSpawnPoint();
        GameObject playerInstance = Instantiate(playerPrefab, spawnPos, Quaternion.identity);
        NetworkObject netObj = playerInstance.GetComponent<NetworkObject>();

        if (netObj != null)
        {
            netObj.SpawnAsPlayerObject(clientId, true);
            Debug.Log($"Spawned player {clientId} at {spawnPos}");
        }
        else
        {
            Debug.LogError("Player prefab missing NetworkObject!");
        }
    }
}