using System;
using PlayerStatus;
using UnityEngine;
using wf;

public class ShopItem : MonoBehaviour
{
	public void Awake()
	{
		this.name_label_ = UTY.GetChildObject(base.gameObject, "ItemName", false).GetComponent<UILabel>();
		this.price_label_ = UTY.GetChildObject(base.gameObject, "Price", false).GetComponent<UILabel>();
		this.icon_sprite_ = UTY.GetChildObject(base.gameObject, "ItemIcon", false).GetComponent<UI2DSprite>();
		this.icon_button_ = UTY.GetChildObject(base.gameObject, "ItemIcon", false).GetComponent<UIButton>();
		this.buy_button_ = UTY.GetChildObject(base.gameObject, "BuyButton", false).GetComponent<UIButton>();
		this.frame_ = UTY.GetChildObject(base.gameObject, "ItemIcon/Frame", false);
		this.purchased_ = UTY.GetChildObject(base.gameObject, "Purchased", false);
		this.impossible_ = UTY.GetChildObject(base.gameObject, "Impossible", false);
	}

	public void OnDestroy()
	{
		if (this.icon_sprite_ != null && this.icon_sprite_.sprite2D != null && this.icon_sprite_.sprite2D.texture != null)
		{
			UnityEngine.Object.DestroyImmediate(this.icon_sprite_.sprite2D.texture);
		}
	}

	public void SetData(Shop.ItemDataBase item_data, ItemInfoWnd info_window, ShopItem.OnClickEvent icon_click_event, ShopItem.OnClickEvent click_event)
	{
		NDebug.AssertNull(item_data != null);
		this.item_data_ = item_data;
		this.info_window_ = info_window;
		this.icon_click_event_ = icon_click_event;
		this.click_event_ = click_event;
		this.buy_button_.onClick.Clear();
		this.icon_button_.onClick.Clear();
		EventDelegate.Add(this.buy_button_.onClick, new EventDelegate.Callback(this.OnClick));
		EventDelegate.Add(this.icon_button_.onClick, new EventDelegate.Callback(this.OnIconClick));
		UIEventTrigger component = this.icon_button_.GetComponent<UIEventTrigger>();
		component.onHoverOver.Clear();
		component.onHoverOut.Clear();
		EventDelegate.Add(component.onHoverOver, new EventDelegate.Callback(this.OnHoverOver));
		EventDelegate.Add(component.onHoverOut, new EventDelegate.Callback(this.OnHoverOut));
		this.name_label_.text = this.item_data_.name;
		this.price_label_.text = Utility.ConvertMoneyText(this.item_data_.price);
		this.LoadIconImage(this.item_data_.icon_file);
		this.UpdateItemData();
	}

	public void UpdateItemData()
	{
		bool is_have_item = this.item_data_.is_have_item;
		if (is_have_item)
		{
			this.buy_button_.gameObject.SetActive(false);
			this.purchased_.SetActive(true);
			this.price_label_.color = Color.white;
			if (this.impossible_ != null)
			{
				this.impossible_.SetActive(false);
			}
		}
		else
		{
			Status status = GameMain.Instance.CharacterMgr.status;
			bool flag = 0L <= status.money - (long)this.item_data_.price;
			if (this.item_data_.is_enabled_buy_item)
			{
				this.buy_button_.gameObject.SetActive(true);
				this.purchased_.SetActive(false);
				if (flag)
				{
					this.buy_button_.isEnabled = true;
					this.price_label_.color = Color.white;
				}
				else
				{
					this.buy_button_.isEnabled = false;
					this.price_label_.color = Color.red;
				}
			}
			else
			{
				this.buy_button_.gameObject.SetActive(false);
				this.purchased_.SetActive(false);
				this.impossible_.SetActive(true);
				this.price_label_.color = Color.red;
			}
		}
	}

	public void SetFlameVisible(bool value)
	{
		this.frame_.SetActive(value);
	}

	public void LoadIconImage(string icon_file_name)
	{
		if (!GameUty.FileSystem.IsExistentFile(icon_file_name))
		{
			Debug.LogError("アイコンファイル[" + icon_file_name + "]が見つかりませんでした");
			icon_file_name = "icon_none.tex";
		}
		Texture2D texture2D = ImportCM.CreateTexture(icon_file_name);
		Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
		sprite.name = icon_file_name;
		if (this.icon_sprite_.sprite2D != null && this.icon_sprite_.sprite2D.texture != null)
		{
			UnityEngine.Object.DestroyImmediate(this.icon_sprite_.sprite2D.texture);
		}
		this.icon_sprite_.sprite2D = sprite;
		if (texture2D.width < texture2D.height)
		{
			this.icon_sprite_.SetDimensions(72, 73);
		}
		else
		{
			this.icon_sprite_.SetDimensions(texture2D.width, texture2D.height);
		}
	}

	public Shop.ItemDataBase item_data
	{
		get
		{
			return this.item_data_;
		}
	}

	private void OnIconClick()
	{
		if (this.icon_click_event_ != null && this.item_data_.type == Shop.ItemDataBase.Type.Parts)
		{
			this.icon_click_event_(this);
		}
	}

	private void OnClick()
	{
		long num = GameMain.Instance.CharacterMgr.status.money - (long)this.item_data_.price;
		if (num < 0L)
		{
			GameMain.Instance.SysDlg.Show("資金が不足しています。", SystemDialog.TYPE.OK, null, null);
			return;
		}
		string f_strMsg = this.item_data_.name + "\nを購入しますか?\n資金 -" + Utility.ConvertMoneyText(this.item_data_.price) + "CR";
		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.CallOnClickEvent), null);
	}

	private void CallOnClickEvent()
	{
		if (this.click_event_ != null)
		{
			this.click_event_(this);
		}
		GameMain.Instance.SysDlg.Show(this.item_data_.name + "を購入しました", SystemDialog.TYPE.OK, null, null);
	}

	private void OnHoverOver()
	{
		Vector3 position = base.transform.position;
		this.info_window_.Open(position, this.icon_sprite_.sprite2D.texture, this.item_data_.name, this.item_data_.detail_text, 0);
		Transform transform = UTY.GetChildObject(this.info_window_.gameObject, "Base", false).transform;
		transform.position = position;
		float y = transform.localPosition.y;
		transform.localPosition = this.info_window_.m_vecOffsetPos + new Vector3(-337f, y, 0f);
		if (-412f > transform.localPosition.y - 90f)
		{
			Vector3 vecOffsetPos = this.info_window_.m_vecOffsetPos;
			vecOffsetPos.y *= -1f;
			transform.localPosition = vecOffsetPos + new Vector3(-337f, y, 0f);
		}
	}

	private void OnHoverOut()
	{
		this.info_window_.Close();
	}

	private ItemInfoWnd info_window_;

	private UILabel name_label_;

	private UILabel price_label_;

	private UI2DSprite icon_sprite_;

	private UIButton icon_button_;

	private UIButton buy_button_;

	private GameObject frame_;

	private GameObject purchased_;

	private GameObject impossible_;

	private Shop.ItemDataBase item_data_;

	private ShopItem.OnClickEvent icon_click_event_;

	private ShopItem.OnClickEvent click_event_;

	public delegate void OnClickEvent(ShopItem click);
}
