﻿using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using TMPro;

[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class Timekeeper : UdonSharpBehaviour {
	private System.DateTime origin = new System.DateTime(2021, 6, 26, 17, 0, 0, 0, System.DateTimeKind.Utc);
	
	public double speedMultiplier = 1;
	
	public double time { get; private set; }
	public double timeOffset { get; private set; }
	private double originSeconds;
	
	public TextMeshProUGUI text;
	
	private double tmr = 0;
	[UdonSynced] private double timeOffsetSynced = 0;
	[UdonSynced] private double originSecondsSynced = 0;
	
	void Start() {
		Reset();
	}
	
	void Update() {
		timeOffset += Time.deltaTime * speedMultiplier;
		time = timeOffset + originSeconds;
		
		tmr += Time.deltaTime;
		if(tmr > 0.7) {
			tmr = 0;
			if(Networking.LocalPlayer.isMaster) {
				timeOffsetSynced = timeOffset;
				originSecondsSynced = originSeconds;
				RequestSerialization();
			}
			System.DateTime abc = origin;
			abc = abc.AddSeconds(time);
			if(text) text.text = abc.ToString();
		}
	}
	
	public void Reset() {
		originSeconds = (System.DateTime.UtcNow - origin).TotalSeconds;
		timeOffset = 0;
	}
	
	public void SyncToMaster() {
		if(Networking.LocalPlayer.isMaster) return;
		timeOffset = timeOffsetSynced;
		originSeconds = originSecondsSynced;
	}
}
