using System;
using System.Diagnostics;
using UnityEngine;

public class SessionController : MonoBehaviour
{
    private Stopwatch _stopWatch;

    private static SessionController _instance;
    private static readonly object _lock = new object();

    public static SessionController Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        var gameObject = new GameObject(nameof(SessionController));
                        _instance = gameObject.AddComponent<SessionController>();
                        DontDestroyOnLoad(gameObject);
                    }
                }
            }
            return _instance;
        }
    }

    public string SessionUuid { get; private set; }
    public long SessionStartTimestamp { get; private set; }
    public long SessionUptime { get => _stopWatch?.ElapsedMilliseconds ?? 0; }

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
    public static void StartSession()
    {
        Instance.SessionUuid = Guid.NewGuid().ToString();

        Instance.SessionStartTimestamp = DateTime.Now.ToBinary();

        Instance._stopWatch = new Stopwatch();
        Instance._stopWatch?.Start();
    }
}
