﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

namespace GLogUnity
{
	[Serializable]
	public class SessionInfo
	{
		public string gameId;
		public string sessionId;
		public string playerId;
		public string context;
		public System.DateTime start;
		public System.DateTime end;

		/// <summary>Defines a Log session</summary>
		///  <param name="version"> Optional: To identify the game version</param>
		///  <param name="playerId">Optional: To identify players across multiple game sessions</param>
		///  <param name="context"> Optional: To game context, for example platform, device specs, geolocation, etc.</param>
		public SessionInfo(string gameUUID, string playerId = null, string context = null)
		{
			this.gameId = gameUUID;
			this.playerId = playerId;
			this.context = context;
			this.sessionId = System.Guid.NewGuid().ToString();
			this.start = System.DateTime.Now;
			this.end = start;
		}

		public string GetMessageStartJSON()
		{
			return $"{{\"id_session\":\"{sessionId}\",\"id_player\":\"{playerId}\",\"version\":\"{Application.version}\",\"start\":\"{start.ToString("yyyy-MM-dd HH:mm:ss")}\",\"context\":\"{context}\",\"data\": [";
		}

		public string GetMessageEndJSON(bool includeSessionEndLog)
		{
			string endTime = end.ToString("yyyy-MM-dd HH:mm:ss");
			if(includeSessionEndLog)
				return $"{{\"time\":\"{endTime}\",\"tag1\":\"{GLog.VerboseLevelString(VerboseLevel.EVENT)}\",\"tag2\":\"GLogChannelGURaaS\",\"tag3\":\"Remote\",\"tag4\":\"Close\",\"data\":\"\"}}],\"end\":\"{endTime}\"}}";
			return $"],\"end\":\"{endTime}\"}}";
		}
	}
}
