﻿// Copyright 2013-2022 AFI,Inc. All rights reserved

using System;
using System.Collections.Generic;
using UnityEngine;
using BackEnd;
using System.IO;

public partial class CloudSaveGroup : BaseGroup {
    private const int OneMB = 1024 * 1024;

    public override string GetGroupName() {
        return "클라우드 세이브";
    }

    public override void SetSubFunctionButton() {
        UIManager.Instance.AddSubFunction("전체 컬렉션 조회", GetCollectionNames);
        UIManager.Instance.AddSubFunction("세이브 업로드(string)", UploadFromString);
        UIManager.Instance.AddSubFunction("세이브 업로드(param)", UploadFromParam);
        UIManager.Instance.AddSubFunction("세이브 다운로드", Download);
        UIManager.Instance.AddSubFunction("세이브 삭제", Delete);
    }

    private void GetCollectionNames() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.CloudSave.GetCollectionNames();

            ShowResultData(bro);
        });
    }

    private void UploadFromString()
    {
        requestUI.AddInputField("컬렉션 이름");
        requestUI.AddInputField("Json파일 경로");

        requestUI.SetExecuteButtonAction(() => {
            var collectionName = InputParseByString(0, 0);
            var filePath = InputParseByStringWithSpecialChar(1, 0);
            var jsonString = string.Empty;
            try
            {
                jsonString = File.ReadAllText(filePath);
                var byteCount = System.Text.Encoding.UTF8.GetByteCount(jsonString);
                if (byteCount > OneMB)
                {
                    Debug.LogError($"The Json size is over 1MB. jsonBytes:{byteCount}, 1MB:{OneMB}");
                }
                else
                {
                    Debug.Log($"The Json size is 1MB or under. jsonBytes:{byteCount}, 1MB:{OneMB}");
                }

                var bro = Backend.CloudSave.Upload(collectionName, jsonString);
                ShowResultData(bro);
            }
            catch (IOException ex)
            {
                Debug.LogError($"파일 읽기 오류. path:{filePath}, errorMsg:{ex.Message}");
                ShowResultData(new BackendReturnObject());
            }
        });
    }

    private void UploadFromParam()
    {
        requestUI.AddInputField("컬렉션 이름");

        requestUI.SetExtraInputAddUI();

        requestUI.SetExecuteButtonAction(() => {
            var collectionName = InputParseByString(0, 0);

            var param = new Param();
            AddParamFromExtraInput(1, param);

            var bro = Backend.CloudSave.Upload(collectionName, param);
            ShowResultData(bro);
        });
    }

    private void Download()
    {
        requestUI.AddInputField("컬렉션 이름");        

        requestUI.SetExecuteButtonAction(() => {
            var collectionName = InputParseByString(0, 0);            

            var bro = Backend.CloudSave.Download(collectionName);
            ShowResultData(bro);
        });
    }

    private void Delete()
    {
        requestUI.AddInputField("컬렉션 이름");

        requestUI.SetExecuteButtonAction(() => {
            var collectionName = InputParseByString(0, 0);

            var bro = Backend.CloudSave.Delete(collectionName);
            ShowResultData(bro);
        });
    }
}