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


using System;
using System.Collections.Generic;
using MaxyGames.uNode;

namespace BansheeGz.BGDatabase
{
    [NodeMenu("BansheeGz", "DB: Get related indexes")]
    public class BGUNGetRelatedIndexes : BGUNCellA, IDataNode<List<int>>
    {
        object IDataNode.GetValue(object graph)
        {
            return GetValue(graph);
        }

        public Type ReturnType()
        {
            return typeof(List<int>);
        }

        public List<int> GetValue(object graph)
        {
            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}' is not multiple or nested relation field!");
            var entity = Entity;
            List<BGEntity> list = null;
            if (isMultiple)
            {
                var multipleField = (BGFieldRelationMultiple) field;
                list = multipleField[entity.Index];
            }
            else
            {
                var nestedField = (BGFieldNested) field;
                list = nestedField.GetRelatedIn(entity.Id);
            }

            List<int> result = null;
            if (list != null && list.Count > 0)
            {
                result = new List<int>();
                foreach (var e in list) result.Add(e.Index);
            }

            return result;
        }
    }
}