using System.Collections;
using System.Collections.Generic;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayFabInit : MonoBehaviour
{
    public string playFabTitleId = "7D3B9"; // Replace with your PlayFab Title ID
    void Start()
    {
    
        if (string.IsNullOrEmpty(PlayFabSettings.TitleId))
        {
            PlayFabSettings.TitleId = playFabTitleId;
        }
        Login();
    }

    void Login()
    {
        var request = new LoginWithCustomIDRequest
        {
            CustomId =  SystemInfo.deviceUniqueIdentifier,
            CreateAccount = true,
            // InfoRequestParameters = new GetPlayerCombinedInfoRequestParams
            // {
            //     GetPlayerProfile = true,  // This will include player profile data in the login response
            //     ProfileConstraints = new PlayerProfileViewConstraints
            //     {
            //         ShowDisplayName = true,
            //         ShowAvatarUrl = true,
            //         ShowCreated = true
            //     }
            // }
        };

        PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); 
    }

    private void OnLoginSuccess(LoginResult result)
    {
        Debug.Log("Login successful!");
        GetPlayerProfile();
        GetCustomUserData();
    }

    private void GetCustomUserData()
    {
        GetPlayerProfileWithUserData();
    }

    public void GetPlayerProfileWithUserData()
    {
        var request = new GetPlayerCombinedInfoRequest
        {
            PlayFabId = PlayFabSettings.staticPlayer.PlayFabId,  // Use the logged-in player's PlayFab ID
            InfoRequestParameters = new GetPlayerCombinedInfoRequestParams
            {
                GetUserData = true // This will include User Data like AvatarID in the response
            }
        };

        PlayFabClientAPI.GetPlayerCombinedInfo(request, OnGetCombinedInfoSuccess, OnGetCombinedInfoFailure);
    }

    private void OnGetCombinedInfoSuccess(GetPlayerCombinedInfoResult result)
    {
        var userData = result.InfoResultPayload.UserData;
        PlayFabManager.Instance.playFabUserDataManager.myCustomData = userData;
    }

    private void OnGetCombinedInfoFailure(PlayFabError error)
    {
        Debug.LogError("Failed to get combined player info: " + error.GenerateErrorReport());
    }
    
    public void GetPlayerProfile()
    {
        var request = new GetPlayerProfileRequest
        {
            PlayFabId = PlayFabSettings.staticPlayer.PlayFabId,
            ProfileConstraints = new PlayerProfileViewConstraints
            {
                ShowDisplayName = true,  // Allowed by your title settings
                // Do not request AvatarUrl or other fields, since they are disallowed
            }
        };

        PlayFabClientAPI.GetPlayerProfile(request, OnGetProfileSuccess, OnGetProfileFailure);
    }

    private void OnGetProfileFailure(PlayFabError obj)
    {
        Debug.LogError("Couldn't Fetch Player Profile " + obj.GenerateErrorReport());
    }

    private void OnGetProfileSuccess(GetPlayerProfileResult obj)
    {
        Debug.Log("Player profile fetching successful");
        PlayFabManager.Instance.playFabUserDataManager.myProfile = obj.PlayerProfile;
    }

    private void OnLoginFailure(PlayFabError error)
    {
        Debug.LogError("Login failed: " + error.GenerateErrorReport());
    }
}