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

public class PlayfabData : MonoBehaviour
{
    //プレイヤーデータ読み出し
    public GetUserDataResult readPlayfabData;
    //リーダーボード読み出し
    public GetLeaderboardResult readLeaderboardData;


    //Playfabデータ読み出し
    private void ReadPlayfabData()
    {
        //ログインしているか確認
        if(PlayFabClientAPI.IsClientLoggedIn() == true)
        {
            //読み出し処理
            var request = new GetUserDataRequest();
            PlayFabClientAPI.GetUserData(request, OnSuccessReadData, OnErrorReadData);
        }
    }

    //Playfabデータ読み出し成功時
    private void OnSuccessReadData(GetUserDataResult result)
    {
        //readPlayfabData.Data["Point"].Valueのように使用する
        readPlayfabData = result;
    }

    //Playfabデータ読み出し失敗時
    private void OnErrorReadData(PlayFabError error) {
        //データ取得失敗時にやりたいことあれば記載
        error.GenerateErrorReport();
    }


    //Playfabデータ更新
    public void UpdatePlayfabData(string dataName, int x) {
        //ログインしているか確認
        if(PlayFabClientAPI.IsClientLoggedIn() == true)
        {
            //更新するデータ
            var updateDataDict = new Dictionary<string, string>() {
                { dataName, x.ToString() }
            };
            
            //インスタンスを生成
            var request = new UpdateUserDataRequest {
                Data = updateDataDict, 
                Permission = UserDataPermission.Private
            };
            
            //データの更新
            PlayFabClientAPI.UpdateUserData(request, OnSuccessUpdateData, OnErrorUpdateData);
        }
    }

    //Playfabデータ更新成功時
    private void OnSuccessUpdateData(UpdateUserDataResult result) {

    }

    //Playfabデータ更新失敗時
    private void OnErrorUpdateData(PlayFabError error) {
        error.GenerateErrorReport();
    }


    //リーダーボード更新
    public void UpdateLeaderBoard(string leaderboardName,int value)
    {
        //ログインしているか確認
        if(PlayFabClientAPI.IsClientLoggedIn() == true)
        {
            //インスタンスを生成
            var request = new UpdatePlayerStatisticsRequest{
                Statistics = new List<StatisticUpdate>{
                    new StatisticUpdate{
                        StatisticName = leaderboardName,
                        Value = value
                    }
                }
            };

            //リーダーボード更新
            PlayFabClientAPI.UpdatePlayerStatistics(request, OnSuccessUpdateLeaderBoard, OnErrorUpdateLeaderBoard);
        }
    }
    
    //リーダーボード更新成功時
    private void OnSuccessUpdateLeaderBoard(UpdatePlayerStatisticsResult result){

    }

    //リーダーボード更新失敗時
    private void OnErrorUpdateLeaderBoard(PlayFabError error){
        error.GenerateErrorReport();
    }


    //リーダーボード読み出し
    public void ReadLeaderboard (string leaderboardName,int startPosition,int maxResultsCount) {
        //ログインしているか確認
        if(PlayFabClientAPI.IsClientLoggedIn() == true)
        {
            var request = new GetLeaderboardRequest{
                //リーダーボードの名前、取得する順位の先頭(0から)、どれだけ取得するか
                StatisticName = leaderboardName,
                StartPosition = startPosition,
                MaxResultsCount = maxResultsCount
            };

            //リーダーボード読み出し
            PlayFabClientAPI.GetLeaderboard(request, OnSuccessReadLeaderboard, OnSuccessReadLeaderboard);
        }
    }

    //リーダーボード読み出し成功時
    private void OnSuccessReadLeaderboard(GetLeaderboardResult result){
        readLeaderboardData = result;
    }

    //リーダーボード読み出し失敗時
    private void OnSuccessReadLeaderboard(PlayFabError error){
        readLeaderboardData = null;
        error.GenerateErrorReport();
    }
}
