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

using System;
using System.Collections.Generic;
using NodeCanvas.Framework;
using ParadoxNotion.Design;

namespace BansheeGz.BGDatabase
{
    [Category("BansheeGz")]
    [Name("BGDatabase: Get related indexes")]
    [Description("Get related entities indexes from database, relationMultiple and nested fields are supported ")]
    public class BGNCGetRelatedIndexes : BGNCCellA
    {
        [RequiredField] public BBParameter<List<int>> targetVar;

        protected override void OnExecute()
        {
            var field = Field;
            var isMultiple = field is BGFieldRelationMultiple;
            var isNested = field is BGFieldNested;
            if (!isMultiple && !isNested )
                throw new Exception($"Can not read value from the database: " +
                                    $"field '{field.FullName}' has wrong type: only relationMultiple and nested fields are supported!");
            var entity = Entity;
            var relatedEntities = isMultiple ? ((BGFieldRelationMultiple) field)[entity.Index] : ((BGFieldNested) field).GetRelatedIn(entity.Id);
            List<int> value = null;
            if (relatedEntities != null && relatedEntities.Count> 0)
            {
                value = new List<int>(relatedEntities.Count);
                foreach (var relatedEntity in relatedEntities) value.Add(relatedEntity.Index);
            }
            targetVar.value = value;
            EndAction(true);
        }
    }
}