using Newtonsoft.Json;
using System.Collections.Generic;

namespace GLTF.Schema
{
	/// <summary>
	/// A texture and its sampler.
	/// </summary>
	public class KHR_lights_punctual : GLTFChildOfRootProperty
	{

		public class KHR_Light : GLTFChildOfRootProperty
		{
			public LightTypes type;
			public List<float> color;
			public float intensity;
			public float range;

			public enum LightTypes
			{
				point,
				directional,
				spot
			}

			public override void Serialize(JsonWriter writer)
			{
				writer.WriteStartObject();
				writer.WritePropertyName("type");
				writer.WriteValue(type.ToString());

				writer.WritePropertyName("intensity");
				writer.WriteValue(intensity);

				if(type != LightTypes.directional)
				{
					writer.WritePropertyName("range");
					writer.WriteValue(range);
				}
				

				writer.WritePropertyName("color");
				writer.WriteStartArray();
				foreach (var channel in color)
				{
					writer.WriteValue(channel);
				}
				writer.WriteEndArray();
				
				// writer.WriteValue(color);
				// writer.WritePropertyName("extensions");
				// writer.WritePropertyName("KHR_lights_punctual");
				// writer.WritePropertyName("light");
				// writer.WriteValue(99);


				// SerializeProperties(writer);

				writer.WriteEndObject();
			}
		}
		/// <summary>
		/// The index of the sampler used by this texture.
		/// </summary>
		public List<KHR_Light> lights;

		
		public KHR_lights_punctual()
		{
		}

		// public LightTypes type;
		// public List<float> color;
		// public float intensity;
		// public float range;

		// public enum LightTypes
		// {
		// 	point,
		// 	directional,
		// 	spot
		// }


		public override void Serialize(JsonWriter writer)
		{
			writer.WriteStartObject();
			writer.WritePropertyName("extensions");
			writer.WritePropertyName("KHR_lights_punctual");
			writer.WritePropertyName("light");
			writer.WriteValue(99);


			// SerializeProperties(writer);

			writer.WriteEndObject();
		}

		public void SerializeProperties(JsonWriter writer)
		{
			// writer.WritePropertyName(INDEX);
			// writer.WriteValue(Index.Id);

			// if (TexCoord != 0)
			// {
			// 	writer.WritePropertyName(TEXCOORD);
			// 	writer.WriteValue(TexCoord);
			// }

			// base.Serialize(writer);
		}

		// public override void Serialize(JsonWriter writer)
		// {
		// 	writer.WriteStartObject();

		// 	if (Sampler != null)
		// 	{
		// 		writer.WritePropertyName("sampler");
		// 		writer.WriteValue(Sampler.Id);
		// 	}

		// 	if (Source != null)
		// 	{
		// 		writer.WritePropertyName("source");
		// 		writer.WriteValue(Source.Id);
		// 	}

		// 	base.Serialize(writer);

		// 	writer.WriteEndObject();
		// }
	}
}
