﻿using AsmodeeDigital.Common.Plugin.Utils;
using AsmodeeDigital.CrossPromo.Plugin.Domain;
using AsmodeeDigital.CrossPromo.Plugin.Manager;
using AsmodeeDigital.CrossPromo.Plugin.Utils;
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 Image ImageButton; 
        }

        public UI ui;
        public int ButtonHeight = 40;
        //TODO : move this in skin  system
        public Color ComingSoonColor;
        public Color PublishedColor;

        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);

            ui.ImageButton.color = PublishedColor;

            if (product.GetStatus() == ProductStatus.ComingSoon)
            {
                ui.TextButton.text = "COMING SOON";
                ui.ImageButton.color = ComingSoonColor;
            }
            else
            {
                if (string.IsNullOrEmpty(_product.shop_digital_url))
                    ui.TextButton.text = "LEARN MORE";
                else
                    ui.TextButton.text = "PLAY NOW";
            }

            StartCoroutine(CrossPromoCacheManager.LoadProductTileImage(product, 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, "click_tile");
        }

        public void TileButton_Clicked()
        {
            if (string.IsNullOrEmpty(_product.shop_digital_url))
                CrossPromoView.Instance.ShowGameDetailsPopup(_product, "click_learn_more");
            else
            {
                AnalyticsManager.Instance.NavigateOnScreen("click_play_now", _product);

                StartCoroutine(WebChecker.WebRequest(
                    //---> Connection
                    () => { Application.OpenURL(_product.shop_digital_url); },
                    //---> No connection
                    () => { CrossPromoView.Instance.ShowMessagePopup("Unable to connect to the server. Please check your connection"); }));
            }
        }
    }
}
