// Copyright (c) Ullrich Praetz - https://github.com/friflo. All rights reserved.
// See LICENSE file in the project root for full license information.


// ReSharper disable once CheckNamespace
namespace Friflo.Engine.ECS;

public static partial class EntityExtensions
{
    /*
    internal static SignatureIndexes GetIndexes<T1>()
        where T1 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5, T6>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
        where T6 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index,
            T6: StructInfo<T6>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5, T6, T7>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
        where T6 : struct, IComponent
        where T7 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index,
            T6: StructInfo<T6>.Index,
            T7: StructInfo<T7>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5, T6, T7, T8>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
        where T6 : struct, IComponent
        where T7 : struct, IComponent
        where T8 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index,
            T6: StructInfo<T6>.Index,
            T7: StructInfo<T7>.Index,
            T8: StructInfo<T8>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5, T6, T7, T8, T9>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
        where T6 : struct, IComponent
        where T7 : struct, IComponent
        where T8 : struct, IComponent
        where T9 : struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index,
            T6: StructInfo<T6>.Index,
            T7: StructInfo<T7>.Index,
            T8: StructInfo<T8>.Index,
            T9: StructInfo<T9>.Index);
    }
    
    internal static SignatureIndexes GetIndexes<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>()
        where T1 : struct, IComponent
        where T2 : struct, IComponent
        where T3 : struct, IComponent
        where T4 : struct, IComponent
        where T5 : struct, IComponent
        where T6 : struct, IComponent
        where T7 : struct, IComponent
        where T8 : struct, IComponent
        where T9 : struct, IComponent
        where T10: struct, IComponent
    {
        return new SignatureIndexes(
            T1: StructInfo<T1>.Index,
            T2: StructInfo<T2>.Index,
            T3: StructInfo<T3>.Index,
            T4: StructInfo<T4>.Index,
            T5: StructInfo<T5>.Index,
            T6: StructInfo<T6>.Index,
            T7: StructInfo<T7>.Index,
            T8: StructInfo<T8>.Index,
            T9: StructInfo<T9>.Index,
            T10:StructInfo<T10>.Index);
    }*/
}
