/*
<copyright file="BGFieldManagerBigInteger.cs" company="BansheeGz">
    Copyright (c) 2018-2021 All Rights Reserved
</copyright>
*/


using System.Globalization;
using System.Numerics;
using UnityEditor;
using UnityEngine;
using Vector2 = UnityEngine.Vector2;

namespace BansheeGz.BGDatabase.Editor
{
    public class BGFieldManagerBigInteger : BGFieldManagerWithButtonA
    {
        private string value;
        private BGFieldBigInteger fieldOnOpen;
        private BGEntity entityOnOpen;

        protected override Vector2 PopupSize => new(300, 200);

        public BGFieldManagerBigInteger() => OnOpen += ReadValue;

        protected override string GetButtonText(BGField field, BGEntity entity, BGFieldViewContext fieldContext) => ((BGFieldBigInteger) field)[entity.Index].ToString();

        private void ReadValue(object arg1, BGField field, BGEntity entity)
        {
            value = field.ToString(entity.Index);
            fieldOnOpen = (BGFieldBigInteger) field;
            entityOnOpen = entity;
        }

        protected override void PopupGui(BGEntity entity, BGField field) => value = EditorGUILayout.TextField(value, BGStyle.Editor_textArea ,GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));

        protected override void OnClose(EditorWindow popup)
        {
            if (fieldOnOpen == null) return;
            if (value == null || value.Trim() == "") fieldOnOpen.ClearValue(entityOnOpen.Index);
            else
            {
                if (BigInteger.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var result)) fieldOnOpen[entityOnOpen.Index] = result;
                else BGEditorUtility.ExitOk("Can not assign value: invalid bigInteger value: $", value);
            }
        }
    }
}