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

using BackEnd;
using BackEnd.Group;

public class GroupGroup : BaseGroup {
    
    public override string GetGroupName() {
        return "그룹 관리";
    }
    
    public override void SetSubFunctionButton() {
        
        // 커스텀 계정
        UIManager.Instance.AddSubFunction("그룹 리스트 불러오기", GetGroupList);
        UIManager.Instance.AddSubFunction("그룹 리스트 불러오기", GetGroupListWithValue);

        UIManager.Instance.AddSubFunction("유저 그룹 상세 정보 불러오기", GetUserGroupDetail);
        UIManager.Instance.AddSubFunction("유저 그룹 상세 정보 불러오기", GetUserGroupDetailNext);

        UIManager.Instance.AddSubFunction("내 유저 그룹 상세 정보 불러오기", GetMyUserGroupDetail);
        UIManager.Instance.AddSubFunction("내 유저 그룹 변경", UpdateMyUserGroup);

    }
    
    private void GetGroupList() {

        requestUI.SetExecuteButtonAction( () => {
            BackendGroupReturnObject bro = Backend.Group.Table.Get();
            ShowResultData(bro);
        });
    }
    
    LastEvaluatedKey groupListOffset = null;
    
    private void GetGroupListWithValue() {
        requestUI.AddInputField("limit");
        requestUI.AddInputField("페이징(bool)", "false");
        
        requestUI.SetExecuteButtonAction( () => {
            var limit = InputParseByInt(0, 0);
            var paging = InputParseByBool(1, 0);
            
            BackendGroupReturnObject bro = null;
            if (paging)
            {
                bro = Backend.Group.Table.Get(limit, groupListOffset);
            }
            else
            {
                bro = Backend.Group.Table.Get(limit);
            }
            
            groupListOffset = bro.GetLastEvaluatedKey();
            
            ShowResultData(bro);
        });
    }
    
    private void GetUserGroupDetail()
    {
        offset = null;
        requestUI.AddInputField("그룹 이름");

        requestUI.SetExecuteButtonAction( () => {
            var groupName = InputParseByString(0, 0);
            var bro = Backend.Group.Member.Get(groupName);
            ShowResultData(bro);
        });
    }

    private LastEvaluatedKey offset = null;
    private void GetUserGroupDetailNext() {
        requestUI.AddInputField("그룹 이름");
        requestUI.AddInputField("limit");

        requestUI.SetExecuteButtonAction( () => {
            var groupName = InputParseByString(0, 0);
            var limit = InputParseByInt(1, 0);

            var bro = Backend.Group.Member.Get(groupName, limit, offset);

            if (bro.GetLastEvaluatedKey() != null)
            {
                offset = bro.GetLastEvaluatedKey();
            }

            ShowResultData(bro);
        });
    }
    
    private void GetMyUserGroupDetail() {
        requestUI.SetExecuteButtonAction( () => {
            var bro = Backend.Group.Get();
            ShowResultData(bro);
        });
    }
    
    private void UpdateMyUserGroup() {
        requestUI.AddInputField("groupUUID");
        requestUI.AddInputField("groupName");
        
        requestUI.SetExecuteButtonAction( () => {
            var groupUUID = InputParseByString(0, 0);
            var groupName = InputParseByString( 1, 0);
            var bro = Backend.Group.Update(groupUUID, groupName);
            ShowResultData(bro);
        });
    }
}