using Lovense.UnityKit.Android;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class AndroidLovenseController : MonoBehaviour
{
    List<AndroidLovenseItem> uiList = new List<AndroidLovenseItem>();

    [SerializeField]
    Transform content;
    [SerializeField]
    Text title;
   
    [SerializeField]
    GameObject newToysObj;
    [SerializeField]
    GameObject inputPanel;
    [SerializeField]
    InputField inputField;

    int accessAccount;
    private void Awake()
    {
        title.text = "toys list";
        LovenseAndroidSDK.GetInstance().SubscribeSearchEvent(OnSearchToysResult);
        LovenseAndroidSDK.GetInstance().SubscribeToysGotEvent(OnGetNewToy);
    }

    // Start is called before the first frame update
    void Start()
    {
        uiList.Clear();
        if(AndroidGlobalParams.GetInstance().bInitDeveloperToken)
        {
            inputPanel.SetActive(false);
            for (int i = 0; i < LovenseAndroidSDK.androidToys.Count; i++)
            {
                OnGetNewToy(LovenseAndroidSDK.androidToys[i]);
            }
        }
        
    }

    private void OnDestroy()
    {
        LovenseAndroidSDK.GetInstance().UnsubscribeSearchEvent(OnSearchToysResult);
        LovenseAndroidSDK.GetInstance().UnsubscribeToysGotEvent(OnGetNewToy);
    }



    private void OnGetNewToy(LovenseAndroidToy toy)
    {
        GameObject newObject = GameObject.Instantiate(newToysObj, content);
        if (newObject != null)
        {
            AndroidLovenseItem newView = newObject.GetComponent<AndroidLovenseItem>();
            newView.gameObject.SetActive(true);
            newView.SetToy(toy);
            uiList.Add(newView);
        }
        else
        {
            //Debug.LogError("error");
        }
    }

    private void OnSearchToysResult(SearchToysResultType type, SearchingErrorData data)
    {
        if(type == SearchToysResultType.ERROR)
        {
            if(data.code == "98" || data.code == "4")
            {
                LovenseAndroidSDK.GetInstance().ShowToast("errorCode:" + data.code + "," + data.msg + ",please make the permissions");
                //accessAccount = 0; //api32
                RequestPermissions(); //api32
                return;
            }
            LovenseAndroidSDK.GetInstance().ShowToast("errorCode:" + data.code + "," + data.msg);

        }
        else if(type == SearchToysResultType.FINISH)
        {
            title.text = "toys list";
        }
    }

    
    public void RequestPermissions()
    {
        //PermissionCallbacks callback = new PermissionCallbacks(); //api32
        //callback.PermissionDenied += OnPermissionDenid;//api32
        //callback.PermissionGranted += OnPermissionAccess;//api32
        //Permission.RequestUserPermissions(permissions, callback);//api32
        for(int i=0;i < permissions.Length;i ++)
        {
            Permission.RequestUserPermission(permissions[i]);
        }
    }

    public void OnPermissionDenid(string name)
    {

    }

    public void OnPermissionAccess(string name)
    {
        if(Permission.HasUserAuthorizedPermission(name))
        {
            accessAccount++;
            if (accessAccount >= permissions.Length) 
            {
                LovenseAndroidSDK.GetInstance().SearchToys();
                title.text = "Searching toys...";
            }
        }
    }

    string[] permissions = {
        "android.permission.READ_EXTERNAL_STORAGE",
        "android.permission.INTERNET",
        "android.permission.ACCESS_NETWORK_STATE",
        "android.permission.BLUETOOTH",
        "android.permission.BLUETOOTH_ADMIN",
		"android.permission.BLUETOOTH_SCAN",
		"android.permission.BLUETOOTH_CONNECT",
        "android.permission.ACCESS_COARSE_LOCATION",
        "android.permission.ACCESS_FINE_LOCATION"
    };
    public void ClickOnStartScan()
    {
        title.text = "Searching toys...";
        LovenseAndroidSDK.GetInstance().SearchToys();
    }

    public void ClickOnStopScan()
    {
        title.text = "toys list";
        LovenseAndroidSDK.GetInstance().StopSearching();
    }

    public void ClickoOnControl()
    {
        List<LovenseAndroidToy> toys = new List<LovenseAndroidToy>();
        List<string> names = new List<string>();
        for (int i=0;i < uiList.Count;i ++)
        {
            AndroidLovenseItem item = uiList[i];
            if(item.IsCheck())
            {
                toys.Add(item.GetToy());
            }
        }
        if (toys.Count == 0)
        {
            LovenseAndroidSDK.GetInstance().ShowToast("please select a toy.");
            return;
        }
        AndroidGlobalParams.GetInstance().thisToys = toys;
        SceneManager.LoadScene("LovenseAndroidScene1");
    }

    

    public void ClickOnSave()
    {
        LovenseAndroidSDK.GetInstance().SetDeveloperToken(inputField.text);
        AndroidGlobalParams.GetInstance().bInitDeveloperToken = true;
        inputPanel.SetActive(false);
    }

}
