﻿using AsmodeeDigital.Common.Plugin.Domain.CrossPromo;
using AsmodeeDigital.Common.Plugin.Domain.Data;
using AsmodeeDigital.CrossPromo.Plugin.Logic;
using AsmodeeDigital.CrossPromo.Plugin.Manager;
using AsmodeeDigital.CrossPromo.Plugin.UI;
using Assets.Plugins.AsmodeeDigital.CrossPromo.Code.UI;
using System;
using UnityEngine;
using UnityEngine.UI;

namespace AsmodeeDigital.CrossPromo.Plugin.View
{
    [ExecuteInEditMode]
    public class CrossPromoView : MonoBehaviour
    {
        [Serializable]
        public class UI
        {
            public Banner BannerImage;
            public MoreGamesPopup MoreGamesPopup;
            public GameDetailsPopup GameDetailsPopup;
            public InterstitialPopup InterstitialPopup;
            public Canvas Canvas;
            public CanvasScaler CanvasScaler;
        }

        public UI ui;

        public CrossPromoSkin Skin;

        public static CrossPromoView Instance;

        public CrossPromoLogic CrossPromoLogic;
        public int NbColumns = 3;

        private void OnEnable()
        {
            Instance = this;
        }

        private void Awake()
        {
            if (Application.isPlaying)
            {
                //---> Invoke Init in 200ms to avoid connection error
                Invoke("Init", 0.2f);
            }
        }

        private void Init()
        {
            CrossPromoLogic = new CrossPromoLogic(CrossPromoManager.Instance.RestAPI);

            CrossPromoLogic.ReceivingProductEvent += CrossPromoLogic_ReceivingProductEvent;

            CrossPromoLogic.Init();
        }

        public void RefreshSkin()
        {
            ui.MoreGamesPopup.RefreshSkin(Skin);
        }

        public void HideAllPopups()
        {
            ui.MoreGamesPopup.Hide();
            ui.GameDetailsPopup.Hide();
            ui.InterstitialPopup.Hide();
        }

        public void ToggleHorizontalBanner()
        {
            if (ui.BannerImage.IsVisible())
            {
                ui.BannerImage.Hide();
            }
            else
            {
                CrossPromoLogic.BannerRequest();
            }
        }

        public void ShowMoreGamesPopup()
        {
            ui.MoreGamesPopup.Show();
        }

        public void ShowInterstitialPopup()
        {
            ui.InterstitialPopup.Show();
        }

        public void ShowGameDetailsPopup(Product product)
        {
            ui.GameDetailsPopup.Show(product);
        }

        private void CrossPromoLogic_ReceivingProductEvent(Product product)
        {
            ui.BannerImage.Init(product);
        }
    }
}
