﻿using System.Collections;
using System.Collections.Generic;

using Bayat.SaveSystem.Storage;

using PlayFab;
using PlayFab.ClientModels;

using UnityEngine;
using UnityEngine.UI;

namespace Bayat.SaveSystem.Examples
{

    public class PlayFabLoginExample : MonoBehaviour
    {

        [SerializeField]
        protected PlayFabStorageType storageType;
        [SerializeField]
        protected Selectable[] controls;

        private void Start()
        {
            this.controls = FindObjectsOfType<Selectable>();
            SetControlsActive(false);
            Login();
        }

        public void Login()
        {
            Debug.Log("Logging in");
            LoginWithCustomIDRequest request = new LoginWithCustomIDRequest();
            request.CreateAccount = true;
            request.CustomId = "savesystemtestuser";
            request.TitleId = PlayFabSettings.TitleId;
            PlayFabClientAPI.LoginWithCustomID(request, result =>
            {
                SaveSystemSettings settings = SaveSystemSettings.DefaultSettings;
                switch (this.storageType)
                {
                    case PlayFabStorageType.Entity:
                        settings.Storage = StorageFactory.FromConnectionString(string.Format("playfab-entity://entity-id={0};usebase64=true", result.EntityToken.Entity.Id, result.EntityToken.Entity.Type));
                        break;
                    case PlayFabStorageType.EntityFiles:
                        settings.Storage = StorageFactory.FromConnectionString(string.Format("playfab-entity-files://entity-id={0};entity-type={1}", result.EntityToken.Entity.Id, result.EntityToken.Entity.Type));
                        break;
                    case PlayFabStorageType.UserData:
                        settings.Storage = StorageFactory.FromConnectionString("playfab-userdata://");
                        break;
                }
                Debug.Log("Logged in using Custom ID successfully!");
                Debug.Log(result.EntityToken.Entity.Id);
                Debug.Log(result.EntityToken.Entity.Type);
                SetControlsActive(true);
            }, error =>
            {
                Debug.LogError("Failed to login with Custom ID");
                Debug.LogError(error);
                SetControlsActive(false);
            });
        }

        public void SetControlsActive(bool active)
        {
            foreach (Selectable control in this.controls)
            {
                control.interactable = active;
            }
        }

    }

}