using System;
using System.Collections;
using System.Globalization;
using UnityEngine;
using UnityEngine.Networking;

public class InternetTime : MonoBehaviour
{
    public static InternetTime Ins;
    private void Awake() { Ins = this; DontDestroyOnLoad(gameObject); }

    public DateTime Time { get; private set; }

    // 한국 표준시 = UTC+9
    private static readonly TimeSpan KSTOffset = TimeSpan.FromHours(9);

    public void Start()
    {
        StartCoroutine(GetKSTTime());
    }

    IEnumerator Co_1Sec()
    {
        while (true)
        {
            yield return new WaitForSeconds(1f);
            Time = Time.AddSeconds(1f);
        }
    }

    IEnumerator GetKSTTime()
    {
        Time = DateTime.Now;
        using (UnityWebRequest req = UnityWebRequest.Get("https://google.com"))
        {
            yield return req.SendWebRequest();
            if (req.result == UnityWebRequest.Result.ConnectionError ||
                req.result == UnityWebRequest.Result.ProtocolError)
            {
                Time = DateTime.Now;
            }
            else
            {
                string dateHeader = req.GetResponseHeader("date");
                if (!string.IsNullOrEmpty(dateHeader))
                {
                    // 서버가 준 시간은 UTC 기준
                    DateTime utcTime = DateTime.ParseExact(
                        dateHeader,
                        "ddd, dd MMM yyyy HH:mm:ss 'GMT'",
                        CultureInfo.InvariantCulture.DateTimeFormat,
                        DateTimeStyles.AssumeUniversal
                    );

                    Time = utcTime.ToUniversalTime() + KSTOffset;
                }
            }

            StartCoroutine(Co_1Sec());
        }
    }
}