﻿using AsmodeeDigital.Common.Plugin.Utils;
using AsmodeeDigital.CrossPromo.Plugin.Domain;
using AsmodeeDigital.CrossPromo.Plugin.View;
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

namespace AsmodeeDigital.CrossPromo.Plugin.UI
{
    public class TileContainer : MonoBehaviour
    {
        [Serializable]
        public class UI
        {
            public RectTransform RectTransform;
            public RawImage Image;
            public TextMeshProUGUI TextButton;
            public Transform Loading;
        }

        public UI ui;
        public int ButtonHeight = 40;

        private Product _product;

        public Rect Init(Product product, int xTilePosition, int yTilePosition, int tileWidth, int tileHeight, int xSpacing, int ySpacing)
        {
            _product = product;

            this.gameObject.SetActive(true);
            ui.Loading.gameObject.SetActive(true);
            ui.Image.gameObject.SetActive(false);

            if (string.IsNullOrEmpty(_product.shop_digital_url))
                ui.TextButton.text = "LEARN MORE";
            else
                ui.TextButton.text = "PLAY NOW";

            StartCoroutine(TextureLoader.LoadTexture(product.tile.image_url, ui.Image, () =>
            {
                ui.Loading.gameObject.SetActive(false);
            }));

            ui.RectTransform.localScale = Vector3.one;

            int x = (tileWidth + xSpacing) * xTilePosition;
            int y = (tileHeight + ButtonHeight + ySpacing) * yTilePosition;

            int width = product.tile.width * tileWidth + (product.tile.width - 1) * xSpacing;
            int height = product.tile.height * (tileHeight + ButtonHeight) + (product.tile.height - 1) * ySpacing;// + ButtonHeight;

            ui.RectTransform.localPosition = new Vector2(x, -y);
            ui.RectTransform.sizeDelta = new Vector2(width, height);

            return new Rect(x, y, width, height);
        }

        public void TileImage_Clicked()
        {
            CrossPromoView.Instance.ShowGameDetailsPopup(_product);
        }

        public void TileButton_Clicked()
        {
            if (string.IsNullOrEmpty(_product.shop_digital_url))
                TileImage_Clicked();
            else
            {
                Application.OpenURL(_product.shop_digital_url);
            }
        }
    }
}
