// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Immutable;
using Microsoft.CodeAnalysis;

namespace Microsoft.AspNetCore.Analyzers
{
    internal class StartupAnalysis
    {
        private readonly ImmutableDictionary<INamedTypeSymbol, ImmutableArray<object>> _analysesByType;

        public StartupAnalysis(
            StartupSymbols startupSymbols,
            ImmutableDictionary<INamedTypeSymbol, ImmutableArray<object>> analysesByType)
        {
            StartupSymbols = startupSymbols;
            _analysesByType = analysesByType;
        }

        public StartupSymbols StartupSymbols { get; }

        public T? GetRelatedSingletonAnalysis<T>(INamedTypeSymbol type) where T : class
        {
            if (_analysesByType.TryGetValue(type, out var list))
            {
                for (var i = 0; i < list.Length; i++)
                {
                    if (list[i] is T item)
                    {
                        return item;
                    }
                }
            }

            return null;
        }

        public ImmutableArray<T> GetRelatedAnalyses<T>(INamedTypeSymbol type) where T : class
        {
            var items = ImmutableArray.CreateBuilder<T>();
            if (_analysesByType.TryGetValue(type, out var list))
            {
                for (var i = 0; i < list.Length; i++)
                {
                    if (list[i] is T item)
                    {
                        items.Add(item);
                    }
                }
            }

            return items.ToImmutable();
        }
    }
}
