using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace Guru
{
    public class CuruAnalyticsDemo: MonoBehaviour
    {
        [SerializeField] private bool _isDebug = true; 
        [SerializeField] private Button _btnInitSDK;
        [SerializeField] private Button _btnStatus;
        [SerializeField] private Button _btnUserProperties;
        [SerializeField] private Button _btnEvents;
        [SerializeField] private Button _btnEvents2;
        [SerializeField] private Button _btnReport;
        [SerializeField] private Button _btnTestCrash;

        // ----------- All Status IDs -----------
        private static readonly string AdjustID = "e35b41522140fa2db9089ef3c78eb8f9";
        private static readonly string FirebaseID = "b7ab5fc399a7bc8725c004943fa82837";
        private static readonly string UID = "BS-YYYYF";
        private static readonly string AdID = "dda3cc2b-5a5e-44cb-8a59-4a0b1b3780fd";
        private static readonly string DeviceID = "e2fb3c5a4c36473648c989bd86a41153";
        private static readonly string AppID = "";
        private static readonly string DeviceInfo = "";
        
        
        private static readonly string ScreenName = "MainMenu";


        
        private void Awake()
        {
            _btnInitSDK.onClick.AddListener(OnClickInit);
            _btnStatus.onClick.AddListener(OnClickStatus);
            _btnUserProperties.onClick.AddListener(OnClickUserProperties);
            _btnEvents.onClick.AddListener(OnClickEvents);
            _btnEvents2.onClick.AddListener(OnClickEvents2);
            _btnReport.onClick.AddListener(OnClickReport);
            _btnTestCrash.onClick.AddListener(OnClickTestCrash);
#if !UNITY_IOS
            _btnTestCrash.gameObject.SetActive(false);
#endif
            
            
        }



        #region Button Callbacks


        private void OnClickInit()
        {
            Debug.Log($"---- [DEMO] Call Analytics init");
            GuruAnalytics.Init(AppID, DeviceInfo, _isDebug);
        }
        
        private void OnClickStatus()
        {
            Debug.Log($"---- [DEMO] Report Stats IDs:  UID:{UID}  DeviceID:{DeviceID}  FirebaseID:{FirebaseID} AdID:{AdID}  AdjustID:{AdjustID}");
            GuruAnalytics.SetUid(UID);
            GuruAnalytics.SetDeviceId(DeviceID);
            GuruAnalytics.SetFirebaseId(FirebaseID);
            GuruAnalytics.SetAdId(AdID);
            GuruAnalytics.SetAdjustId(AdjustID);
        }

        private void OnClickUserProperties()
        {
            string item_category = "main";
            int level = 7;
            Debug.Log($"---- [DEMO] Call SetUserProperty: item_category:{item_category}  level:{level}");
            GuruAnalytics.SetUserProperty("item_category", item_category);
            GuruAnalytics.SetUserProperty("level", level.ToString());
        }

        private void OnClickEvents()
        {
            Debug.Log($"---- [DEMO] Report Screen: {ScreenName}");
            GuruAnalytics.SetScreen(ScreenName);

            string eventName = "user_get_coin";
            Dictionary<string, dynamic> data = new Dictionary<string, dynamic>()
            {
                { "level", 7 },
                { "user_coin", 105L },
                { "win_rate", 21.25f },
                { "b_level", 7 },
                { "result", "retry" }
            };

            string s = "---- Data ----\n";
            foreach (var k in data.Keys)
            {
                s += $"-- K:{k}  V:{data[k]}\n";
            }
            Debug.Log(s);   

            Debug.Log($"---- [DEMO] Call LogEvent");
            GuruAnalytics.LogEvent(eventName, data);
        }

        private void OnClickEvents2()
        {
            string eventName = "user_data_loaded";
            GuruAnalytics.LogEvent(eventName);
        }


        private void OnClickReport()
        {
            GuruAnalytics.ReportEventSuccessRate();
        }



        private void OnClickTestCrash()
        {
#if UNITY_IOS
            Debug.Log($"--> OnClickTestCrash");
            GuruAnalytics.TestCrash();
#endif
        }


        #endregion
        
        
        
        
        
        
        
        
    }
}