﻿namespace Mapbox.Unity.Map
{
	using UnityEngine;
	using Mapbox.Unity.MeshGeneration.Data;

	public class SubLayerCustomStyleAtlasWithColorPallete : ISubLayerCustomStyleAtlasWithColorPallete
	{
		private GeometryMaterialOptions _materialOptions;
		public SubLayerCustomStyleAtlasWithColorPallete(GeometryMaterialOptions materialOptions)
		{
			_materialOptions = materialOptions;
		}

		public Material TopMaterial
		{
			get
			{
				return _materialOptions.materials[0].Materials[0];
			}
			set
			{
				if (_materialOptions.materials[0].Materials[0] != value)
				{
					_materialOptions.materials[0].Materials[0] = value;
					_materialOptions.HasChanged = true;
				}
			}
		}
		public Material SideMaterial
		{
			get
			{
				return _materialOptions.materials[1].Materials[0];
			}
			set
			{
				if (_materialOptions.materials[1].Materials[0] != value)
				{
					_materialOptions.materials[1].Materials[0] = value;
					_materialOptions.HasChanged = true;
				}
			}
		}

		public AtlasInfo UvAtlas
		{
			get
			{
				return _materialOptions.atlasInfo;
			}

			set
			{
				if (_materialOptions.atlasInfo != value)
				{
					_materialOptions.atlasInfo = value;
					_materialOptions.HasChanged = true;
				}
			}
		}

		public ScriptablePalette ColorPalette
		{
			get
			{
				return _materialOptions.colorPalette;
			}

			set
			{
				if (_materialOptions.colorPalette != value)
				{
					_materialOptions.colorPalette = value;
					_materialOptions.HasChanged = true;
				}
			}
		}

		public void SetAsStyle(Material topMaterial, Material sideMaterial, AtlasInfo uvAtlas, ScriptablePalette palette)
		{
			_materialOptions.texturingType = UvMapType.Atlas;
			_materialOptions.materials[0].Materials[0] = topMaterial;
			_materialOptions.materials[1].Materials[0] = sideMaterial;
			_materialOptions.atlasInfo = uvAtlas;
			_materialOptions.colorPalette = palette;
			_materialOptions.HasChanged = true;
		}

		public void SetAsStyle()
		{
			_materialOptions.SetDefaultAssets(UvMapType.AtlasWithColorPalette);
			_materialOptions.HasChanged = true;
		}
	}

}


