#if UNITY_ANDROID
/*
* PubMatic Inc. ("PubMatic") CONFIDENTIAL
* Unpublished Copyright (c) 2006-2022 PubMatic, All Rights Reserved.
*
* NOTICE:  All information contained herein is, and remains the property of PubMatic. The intellectual and technical concepts contained
* herein are proprietary to PubMatic and may be covered by U.S. and Foreign Patents, patents in process, and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material is strictly forbidden unless prior written permission is obtained
* from PubMatic.  Access to the source code contained herein is hereby forbidden to anyone except current PubMatic employees, managers or contractors who have executed
* Confidentiality and Non-disclosure agreements explicitly covering such access or to such other persons whom are directly authorized by PubMatic to access the source code and are subject to confidentiality and nondisclosure obligations with respect to the source code.
*
* The copyright notice above does not evidence any actual or intended publication or disclosure  of  this source code, which includes
* information that is confidential and/or proprietary, and is a trade secret, of  PubMatic.   ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC  PERFORMANCE,
* OR PUBLIC DISPLAY OF OR THROUGH USE  OF THIS  SOURCE CODE  WITHOUT  THE EXPRESS WRITTEN CONSENT OF PUBMATIC IS STRICTLY PROHIBITED, AND IN VIOLATION OF APPLICABLE
* LAWS AND INTERNATIONAL TREATIES.  THE RECEIPT OR POSSESSION OF  THIS SOURCE CODE AND/OR RELATED INFORMATION DOES NOT CONVEY OR IMPLY ANY RIGHTS
* TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT  MAY DESCRIBE, IN WHOLE OR IN PART.
*/
using System.Collections.Generic;
using UnityEngine;
namespace OpenWrapSDK.Android
{
    /// 
    /// Android impression client to set or get parameters on impression object.
    /// 
    internal class POBImpressionClient : IPOBImpression
    {
        // Reference to Android's POBImpression
        private readonly AndroidJavaObject ImpressionObject;
        /// 
        /// Constructor
        /// 
        /// AndroidJavaObject of POBImpression
        internal POBImpressionClient(AndroidJavaObject javaObject)
        {
            ImpressionObject = javaObject;
        }
        /// 
        /// Getter for Ad Position on POBImpression object
        /// 
        /// POBAdPosition
        public POBAdPosition GetAdPosition()
        {
            var adPosition = ImpressionObject.Call("getAdPosition");
            int adPositionValue = adPosition.Call("getValue");
            return POBAndroidUtils.convertJavaAdPostionToPOBAdPosition(adPositionValue);
        }
        /// 
        /// Getter for test creative id on POBImpression object
        /// 
        /// test creative id as string
        public string GetTestCreativeId()
        {
            return ImpressionObject.Call("getTestCreativeId");
        }
        /// 
        /// Getter for zone id on POBImpression object
        /// 
        /// zone id as string
        public string GetZoneId()
        {
            return ImpressionObject.Call("getPMZoneId");
        }
        /// 
        /// Setter for ad position on POBImpression object
        /// 
        /// Instance of POBAdPosition
        public void SetAdPosition(POBAdPosition position)
        {
            //Convert a POBAdPosition to native POBAdPosition
            AndroidJavaClass adPositionClass = new AndroidJavaClass("com.pubmatic.sdk.openwrap.core.POBRequest$AdPosition");
            AndroidJavaObject adPosition = adPositionClass.GetStatic(POBAndroidUtils.convertPOBAdPostionToAdPosition(position));
            //set the adpostion to impression objet
            ImpressionObject.Call("setAdPosition", adPosition);
        }
        /// 
        /// Setter for Custom parameters on POBImpression object
        /// 
        /// Instance of POBAdPosition
        public void SetCustomParams(Dictionary> customParams)
        {
            //Convert a value lists to AndroidJavaObject of List
            Dictionary customParamDict = new Dictionary();
            foreach (KeyValuePair> entry in customParams)
            {
                customParamDict.Add(entry.Key, POBAndroidUtils.ConvertListToJavaList(entry.Value));
            }
            //Convert c# dictionary to java hashMap
            AndroidJavaObject customParamMap = POBAndroidUtils.ConvertDictionaryToJavaMap(customParamDict);
            ImpressionObject.Call("setCustomParam", customParamMap);
        }
        /// 
        /// Setter for Test creative id on POBImpression object
        /// 
        /// Instance of string
        public void SetTestCreativeId(string creativeId)
        {
            ImpressionObject.Call("setTestCreativeId", creativeId);
        }
        /// 
        /// Setter for Zone Id on POBImpression object
        /// 
        /// Instance of string
        public void SetZoneId(string zoneId)
        {
            ImpressionObject.Call("setPMZoneId", zoneId);
        }
        /// 
        /// Getter for Ad unit id on POBImpression object
        /// 
        ///  Ad unit id as string
        public string GetAdUnitId()
        {
            return ImpressionObject.Call("getAdUnitId");
        }
    }
}
#endif