namespace Guru
{
    using UnityEngine;
    using System;
    using System.Linq;
    
    
    public partial class GuruSDK
    {
        public static bool IsIAPReady = false;
        
        /// 
        /// 初始化IAP 功能
        /// 
        public static void InitIAP(byte[] googleKey, byte[] appleRootCerts)
        {
            GuruIAP.Instance.OnInitResult += OnIAPInitResult;
            GuruIAP.Instance.OnRestored += OnRestored;
            GuruIAP.Instance.OnBuyStart += OnBuyStart;
            GuruIAP.Instance.OnBuyEnd += OnBuyEnd;
            
            GuruIAP.Instance.InitWithKeys(googleKey, appleRootCerts, IsDebugMode);
        }
        /// 
        /// 初始化结果
        /// 
        /// 
        private static void OnIAPInitResult(bool success)
        {
            LogI($"IAP init result: {success}");
            
            IsIAPReady = success;
            Callbacks.IAP._onIAPInitComplete?.Invoke(success);
        }
        private static bool CheckIAPReady()
        {
            if (!IsIAPReady)
            {
                LogE("IAP is not ready, call  first.");
                return false;
            }
            return true;
        }
        
        #region Purchase
        public static ProductSetting GetProductSettingById(string productId)
        {
            var products = GuruSettings.Instance.Products;
            if (products != null && products.Length > 0)
            {
                return products.FirstOrDefault(p => p.ProductId == productId);   
            }
            return null;
        }
        
        private static Action _onPurchaseCallback;
        
        /// 
        /// 购买商品, 通过商品Name
        /// 
        /// 
        /// 
        public static void Purchase(string productName, Action purchaseCallback = null)
        {
            if (CheckIAPReady())
            {
                _onPurchaseCallback = purchaseCallback;
                GuruIAP.Instance.Buy(productName);
            }
        }
        
        /// 
        /// 购买商品, 通过商品ID
        /// 
        /// 
        /// 
        public static bool PurchaseById(string productId, Action purchaseCallback = null)
        {
            var productName = GetProductSettingById(productId)?.ProductName ?? "";
            
            if (CheckIAPReady() && !string.IsNullOrEmpty(productName))
            {
                Purchase(productName, purchaseCallback);
                return true;
            }
            return false;
        }
        
        /// 
        /// 支付回调
        /// 
        /// 
        /// 
        private static void OnBuyEnd(string productId, bool success)
        {
            _onPurchaseCallback?.Invoke(productId, success);
        }
        private static void OnBuyStart(string productId)
        {
            Callbacks.IAP._onPurchaseStart?.Invoke(productId);
        }
        #endregion
        
        #region Restore Purchase
        private static Action _onRestored;
        /// 
        /// 恢复购买
        /// 
        /// 
        public static void Restore(Action restoreCallback)
        {
            if (CheckIAPReady())
            {
                _onRestored = restoreCallback;
                GuruIAP.Instance.Restore();
            }
        }
        private static void OnRestored(bool success)
        {
            _onRestored?.Invoke(success);
        }
        
        #endregion
    }
}