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

using UnityEngine;
using BackEnd;

public class UtilsGroup : BaseGroup {
    public override string GetGroupName() {
        return "기타";
    }

    public override void SetSubFunctionButton() {
        UIManager.Instance.AddSubFunction("서버 시간 조회", GetServerTime);
        UIManager.Instance.AddSubFunction("프로젝트 상태 조회", GetServerStatus);
        UIManager.Instance.AddSubFunction("프로젝트 버전 조회", GetLatestVersion);
        UIManager.Instance.AddSubFunction("구글 해시키 조회", GetGoogleHash);
        UIManager.Instance.AddSubFunction("푸시 등록", PutDeviceToken);
        UIManager.Instance.AddSubFunction("푸시 해제", DeleteDeviceToken);
        UIManager.Instance.AddSubFunction("야간푸시 동의 여부", AgreeNightPushNotification);
        UIManager.Instance.AddSubFunction("위치 자동 불러오기", UpdateLocationProperties);
        UIManager.Instance.AddSubFunction("위치 커스텀마이징", CustomizeLocationProperties);


    }

    private void GetServerTime() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.Utils.GetServerTime();
            ShowResultData(bro);
        }); 
    }
    
    private void GetServerStatus() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.Utils.GetServerStatus();
            ShowResultData(bro);
        }); 
    }
    
    private void GetLatestVersion() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.Utils.GetLatestVersion();
            ShowResultData(bro);
        }); 
    }
    
    private void GetGoogleHash() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.Utils.GetLatestVersion();
            UIManager.Instance.OpenResultUI(bro.ToString());
        }); 
    }
    
    
    private void PutDeviceToken() {

#if UNITY_ANDROID
        var bro = Backend.Android.PutDeviceToken();
#elif UNITY_IOS
            var bro = Backend.iOS.PutDeviceToken(isDevelopment.iosDev);
#else
            var bro = Backend.Android.PutDeviceToken();
#endif            
        UIManager.Instance.OpenResultUI(bro.ToString());
    }
    
    private void DeleteDeviceToken() {

#if UNITY_ANDROID
        var bro = Backend.Android.DeleteDeviceToken();
#elif UNITY_IOS
            var bro = Backend.iOS.DeleteDeviceToken();
#else
            var bro = Backend.Android.DeleteDeviceToken();
#endif
        UIManager.Instance.OpenResultUI(bro.ToString());
    }
    
    private void AgreeNightPushNotification() {
        requestUI.AddInputField("야간푸시 동의(true/false)");

        requestUI.SetExecuteButtonAction( () => {
            var isAgree = InputParseByBool(0, 0);

            var bro =  Backend.Android.AgreeNightPushNotification(isAgree);
            UIManager.Instance.OpenResultUI(bro.ToString());
        }); 
    }
    
    
    private void UpdateLocationProperties() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.LocationProperties.UpdateLocationProperties();
            
            UIManager.Instance.OpenResultUI(
                $"결과 : {bro}\n" + 
                $"City : {Backend.LocationProperties.City}\n" + 
                $"Country : {Backend.LocationProperties.Country}\n" +
                $"Region : {Backend.LocationProperties.Region}\n" +
                $"Language : {Backend.LocationProperties.Language}");
        }); 
    }
    
        private void CustomizeLocationProperties() {
            requestUI.AddInputField("city");
            requestUI.AddInputField("country");
            requestUI.AddInputField("region");
            requestUI.AddInputField("language");

            requestUI.SetExecuteButtonAction( () => {
                var city = InputParseByString(0, 0);
                var country = InputParseByString(1, 0);
                var region = InputParseByString(2, 0);
                var language = InputParseByString(3, 0);

                Backend.LocationProperties.CustomizeLocationProperties(city, country, region, language);
                
                
                UIManager.Instance.OpenResultUI(
                    $"City : {Backend.LocationProperties.City}\n" + 
                    $"Country : {Backend.LocationProperties.Country}\n" +
                    $"Region : {Backend.LocationProperties.Region}\n" +
                    $"Language : {Backend.LocationProperties.Language}");
            }); 
        }
}