﻿using UnityEngine;
using System;
using UnityEngine.UI;
using MiniJSON;
using Stove.StoveSDK;
using System.Collections.Generic;

public class SetProviderDialog : MonoBehaviour
{
    private Action<List<Provider>> action;

    public GameObject panel;

    private List<string> providerNames = new List<string>();
    private List<Provider> providers = new List<Provider>();
    
    public static void Show(Action<List<Provider>> action)
    {
        Present(action);   
    }

    public static void Present(Action<List<Provider>> action)
    {
        GameObject setProviderDialogPanel = GameObject.Find("SetProviderDialogPanel");

        Image image = setProviderDialogPanel.GetComponent<Image>();
        image.enabled = true;

        SetProviderDialog setProviderDialog = setProviderDialogPanel.GetComponent<SetProviderDialog>();
        setProviderDialog.panel.SetActive(true);
        setProviderDialog.action = action;
        setProviderDialog.providers.Clear();
    }

    public static void Dismiss()
    {
        GameObject setProviderDialogPanel = GameObject.Find("SetProviderDialogPanel");

        Image image = setProviderDialogPanel.GetComponent<Image>();
        image.enabled = false;

        SetProviderDialog setProviderDialog = setProviderDialogPanel.GetComponent<SetProviderDialog>();
        setProviderDialog.panel.SetActive(false);
    }

    public void OnValueChanged(Toggle toggle)
    {
        if (toggle.isOn)
        {
            providerNames.Add(toggle.name);
        }
        else
        {
            providerNames.Remove(toggle.name);
        }
    }

    public void OnClick(int tag)
    {
        if (tag == 0)
        {
            foreach(string providerName in providerNames)
            {
                if (providerName.Equals("GoogleProvider"))
                {
                    providers.Add(new GoogleProvider());
                }
                else if (providerName.Equals("AppleProvider"))
                {
                    providers.Add(new AppleProvider());
                }
                else if (providerName.Equals("FacebookProvider"))
                {
                    providers.Add(new FacebookProvider());
                }
                else if (providerName.Equals("EmailProvider"))
                {
                    providers.Add(new EmailProvider());
                }
                else if (providerName.Equals("NaverProvider"))
                {
                    providers.Add(new NaverProvider());
                }
                else if (providerName.Equals("GuestProvider"))
                {
                    /* 게스트 유지 옵션 사용시 샘플앱 적용 
                    GuestProvider guestProvider = new GuestProvider();

                    if(AuthSample.isMaintainGuest) {
                        string accessTokenString = PlayerPrefs.GetString("guest", "");
                        Debug.Log("------- [Stove-Sample] accessTokenString : " + accessTokenString + "-------");
                        if (!string.IsNullOrEmpty(accessTokenString))
                        { 
                            Debug.Log("------- [Stove-Sample] accessTokenString Not Null -------");

                            guestProvider.User = new Dictionary<string, string>
                            {
                                { "Token", accessTokenString }
                            };
                        }
                    }
                    */
                    providers.Add(new GuestProvider()); 
                }
                else if (providerName.Equals("StoveAppProvider"))
                {
                    providers.Add(new StoveAppProvider());
                }
                else if (providerName.Equals("LineProvider"))
                {
                    providers.Add(new LineProvider());
                }
                else if (providerName.Equals("SteamProvider"))
                {
                    providers.Add(new SteamProvider());
                }
            }
        }

        action.Invoke(providers);
        Dismiss();
    }
}