using Assets.Scripts.Multiplayer;
using Steamworks.ServerList;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.Netcode;
using Unity.Netcode.Transports.UTP;
using UnityEngine;
using UnityEngine.SceneManagement;
using static UnityEditor.Experimental.GraphView.GraphView;

public class NetworkedGameSetup : NetworkBehaviour
{
    [SerializeField] private GameObject PlayerPrefab;

    private void Awake()
    {
        if (NetworkManager.Singleton == null || NetworkManager.Singleton.SceneManager == null) return;

        DontDestroyOnLoad(this);
        NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += SceneLoaded;
    }

    private void SceneLoaded(string sceneName, LoadSceneMode loadSceneMode, List<ulong> clientsCompleted, List<ulong> clientsTimedOut)
    {
        if (!sceneName.ToLower().Contains("game")) return;

        NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneLoaded; // Only run once
        StartSetupProcedure(clientsCompleted);
    }

    private void StartSetupProcedure(List<ulong> playerIds)
    {
        bool isServer = SteamManager.IsServer || LocalManager.IsServer;

        GameObject[] players;
        if (isServer)
            players = SpawnPlayers(playerIds);
    }

    private GameObject[] SpawnPlayers(List<ulong> playerIds)
    {
        GameObject[] players = new GameObject[playerIds.Count];

        for (int i = 0; i < playerIds.Count; i++)
        {
            GameObject player = Instantiate(PlayerPrefab, Vector2.up * 3, Quaternion.identity);
            player.GetComponent<NetworkObject>().SpawnAsPlayerObject(playerIds[i], true);
            players[i] = player;
        }

        return players;
    }
}