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

	public class SubLayerCustomStyleAtlas : ISubLayerCustomStyleAtlas
	{
		private GeometryMaterialOptions _materialOptions;
		public SubLayerCustomStyleAtlas(GeometryMaterialOptions materialOptions)
		{
			_materialOptions = materialOptions;
		}
		public Material TopMaterial
		{
			get
			{
				return _materialOptions.customStyleOptions.materials[0].Materials[0];
			}
			set
			{
				if (_materialOptions.customStyleOptions.materials[0].Materials[0] != value)
				{
					_materialOptions.customStyleOptions.materials[0].Materials[0] = value;
					_materialOptions.HasChanged = true;
				}
			}
		}
		public Material SideMaterial
		{
			get
			{
				return _materialOptions.customStyleOptions.materials[1].Materials[0];
			}
			set
			{
				if (_materialOptions.customStyleOptions.materials[1].Materials[0] != value)
				{
					_materialOptions.customStyleOptions.materials[1].Materials[0] = value;
					_materialOptions.HasChanged = true;
				}
			}
		}

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

			set
			{
				if (_materialOptions.customStyleOptions.atlasInfo != value)
				{
					_materialOptions.customStyleOptions.atlasInfo = value;
					_materialOptions.HasChanged = true;
				}
			}
		}
		public void SetAsStyle(Material topMaterial, Material sideMaterial, AtlasInfo uvAtlas)
		{
			_materialOptions.customStyleOptions.texturingType = UvMapType.Atlas;
			_materialOptions.customStyleOptions.materials[0].Materials[0] = topMaterial;
			_materialOptions.customStyleOptions.materials[1].Materials[0] = sideMaterial;
			_materialOptions.customStyleOptions.atlasInfo = uvAtlas;
			_materialOptions.HasChanged = true;
		}

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

}


