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

using System;
using GameCreator.Runtime.Common;
using UnityEngine;

namespace BansheeGz.BGDatabase
{
    /// <summary>
    ///  set database relationSingle value  
    /// </summary>
    [Title("BGDatabase: set related")]
    [Category("BansheeGz/set related")]
    [Serializable]
    public class BGGCSetRelated : BGGCSetA
    {
        [SerializeField] private PropertyGetDecimal value = GetDecimalDecimal.Create(0D);

        public override string Title => "BGDatabase: set related";
        public override bool IsSupported(BGField field) => field is BGFieldRelationSingle;

        protected override void Set(Args args, BGGCCell cell)
        {
            var relatedMeta = ((BGFieldRelationSingle)cell.field).RelatedMeta;
            var relatedIndex = (int)value.Get(args);
            if (relatedIndex >= relatedMeta.CountEntities || relatedIndex < -1)
                Debug.Log($"WARNING! BGDatabase: can not set related, cause index is out of valid range! meta {relatedMeta}, invalid index {relatedIndex}");
            else cell.Value = relatedIndex == -1 ? null : relatedMeta.GetEntity(relatedIndex);
        }
    }
}