﻿using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using LitJson;
using System.Collections.Generic;

namespace TentuPlay.CRM
{
    // THIS SCRIPT IS ATTACHED TO TPPersonalizedOfferController.
    public class TPPersonalizedOfferController : TPAdviceWindowBaseController
    {
        public bool destroyExistingOfferWindow = true;
        private List<string> offerTypes = new List<string>() {
            "TentuPlayManualOffer_landscape",
            "TentuPlayManualOffer_portrait",
            "TentuPlayAIOffer"
        };

        private int CheckExistingOfferWindow()
        {
            int numDestroyedWindows = 0;

            foreach (Transform child in transform)
            {
                if (offerTypes.Contains(child.name) && this.destroyExistingOfferWindow)
                {
                    Destroy(child.gameObject);
                    numDestroyedWindows++;
                }
            }

            return numDestroyedWindows;
        }

        // THIS METHOD IS CALLED WHEN ShowOfferById or ShowLastestOffer.
        public override int ShowOffer(TPOfferCalculated thisOffer, string player_id, string language, DownloadHandlerTexture raw_image, string layout)
        {
            int numDestroyedWindows = this.CheckExistingOfferWindow();

#if UNITY_2019_4_OR_NEWER 
            string objectName;
            if (layout == "h")
                objectName = "TentuPlayManualOffer_landscape";
            else if (layout == "v")
                objectName = "TentuPlayManualOffer_portrait";
            else // ai
                objectName = "TentuPlayAIOffer";

            GameObject offerWindowPrefab = Resources.Load<GameObject>(objectName);

            GameObject offerWindow = Instantiate(offerWindowPrefab, Vector2.zero, Quaternion.identity);
            GameObject offerImage;

            try
            {
                if (layout == "ai")
                {
                    offerImage = offerWindow.transform.Find("BackgroundImage").gameObject;

                    JsonData offerJson = JsonMapper.ToObject(thisOffer.offer);
                    offerWindow.transform.Find("Title").gameObject.GetComponent<Text>().text = (string)offerJson["display_parameters"][language]["title"];
                    offerWindow.transform.Find("Message").gameObject.GetComponent<Text>().text = (string)offerJson["display_parameters"][language]["message"];
                    // Toggle Message is optional.
                    Transform ToggleMessage = offerWindow.transform.Find("ToggleMessage");
                    if (ToggleMessage != null)
                        ToggleMessage.gameObject.GetComponent<Text>().text = (string)offerJson["display_parameters"][language]["toggle_message"];
                }
                else // Manual
                {
                    offerImage = offerWindow.transform.Find("OfferImage").gameObject;
                }

                offerImage.gameObject.AddComponent<RawImage>();
                offerImage.GetComponent<RawImage>().texture = raw_image.texture;

            }
            catch (System.Exception e)
            {
                if (TPSettings.DEBUG) Debug.Log("<color=red>TPError</color>||Error showing an offer: " + e.ToString());
                Destroy(offerWindow);

                return -1;
            }
            int r;

            if (layout == "ai")
                r = offerWindow.GetComponent<TentuPlayAIOffer>().PlaceOffer(thisOffer, player_id, language);
            else // Manual
                r = offerWindow.GetComponent<TentuPlayManualOffer>().PlaceOffer(thisOffer, player_id, language);
            
            if (r > 0) 
                offerWindow.transform.SetParent(this.gameObject.transform, false);
            else
                Destroy(offerWindow);

            return r;
#endif
        }
    }
}