using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIImageExtParam : BaseMeshEffect
{
	public float rate = 1.0f;

	protected override void Start()
	{
		base.Start();
		if (graphic)
		{
			if (graphic.canvas)
			{
				var v1 = base.graphic.canvas.additionalShaderChannels;
				var v2 = AdditionalCanvasShaderChannels.TexCoord1;
				var v3 = v1;
				if ((v1 & v2) != v2)
				{
					v3 |= v2;
				}
				v2 = AdditionalCanvasShaderChannels.TexCoord2;
				if ((v1 & v2) != v2)
				{
					v3 |= v2;
				}
				if (v3 != v1)
				{
					graphic.canvas.additionalShaderChannels = v3;
					graphic.SetVerticesDirty();
				}
			}
		}
		//RectTransform rt = GetComponent<RectTransform>();


	}

	public override void ModifyMesh(VertexHelper vh)
	{
		if (!IsActive()) return;

		Image img = graphic as Image;
		if (null == img) return;
		Handle(vh);
	}

	private void Handle(VertexHelper vh)
	{
		int count = vh.currentVertCount;
		Vector3 ct = Vector3.zero;
		UIVertex vert = UIVertex.simpleVert;

		if (count == 0)
			return;

		//Bounds b = new Bounds();
		//for (int i = 0; i < count; ++i)
		//{
		//	vh.PopulateUIVertex(ref vert, i);
		//	Vector3 pos = vert.position;
		//	b.Expand(pos);
		//}
		//Vector3 pcenter = b.center;
		//pcenter.z = rate;

		//Vector3 vmin = Vector3.zero;
		//Vector3 vmax = Vector3.zero;
		//for (int i = 0; i < count; ++i)
		//{
		//	vh.PopulateUIVertex(ref vert, i);
		//	Vector3 pos = vert.position;
		//	if (i == 0)
		//	{
		//		vmin = vmax = pos;
		//	}
		//	else
		//	{
		//		if (pos.x < vmin.x) vmin.x = pos.x;
		//		if (pos.x > vmax.x) vmax.x = pos.x;

		//		if (pos.y < vmin.y) vmin.y = pos.y;
		//		if (pos.y > vmax.y) vmax.y = pos.y;
		//	}
		//}
		//Vector3 pcenter = Vector3.zero;
		//pcenter.x = vmin.x + (vmax.x - vmin.x) * 0.5f;
		//pcenter.y = vmin.y + (vmax.y - vmin.y) * 0.5f;
		//pcenter.z = rate;


		//Rect rect = graphic.GetPixelAdjustedRect();
		//Vector2 c = rect.center;
		//Vector3 pcenter = Vector3.zero;
		//pcenter.x = c.x;
		//pcenter.y = c.y;
		//pcenter.z = rate;
		Vector3 pcenter = transform.position;


		var sb = new System.Text.StringBuilder();
		
		for (int i = 0; i < count; ++i)
		{
			vh.PopulateUIVertex(ref vert, i);
			vert.uv1 = pcenter;
			vh.SetUIVertex(vert, i);
			sb.Append($"{i} {vert.position.x}, {vert.position.y};");
		}

		sb.Append($"\npcenter: {pcenter.x}, {pcenter.y}\n");
		Debug.Log($"{Helper.Tick}{sb}\n", this);
	}
}