@using Edge.Core.Processor;
@using System.Reflection;
@using Edge.Core.Processor.Dispatcher.Attributes;
@model IEnumerable<Tuple<ProcessorDescriptor, MetaPartsDescriptor>>;
@{
    ViewData["Title"] = "LiteFccCore Portal";
}

<div class="text-center">
    <h2 class="display-4">LiteFccCore Web Portal</h2>
</div>
<div>
    <p>Total active processors count: @Model.Count()</p>
    @foreach (var processorCompoundInfo in Model.OrderByDescending(p => p.Item1.ProcessorType).ThenBy(p => p.Item1.Processor.MetaConfigName))
    {
        var processorDescriptor = processorCompoundInfo.Item1;
        <ul>
            <li>
                @if (processorDescriptor.ProcessorType == ProcessorType.Application)
                {
                    <p>Application Processor Name: <b>@processorDescriptor.Processor.MetaConfigName</b> <i>of type: @processorDescriptor.Processor.GetType().FullName</i></p>
                    <p>tags: @(processorCompoundInfo.Item2?.Tags?.Aggregate((acc,n)=>acc+", "+n)??"")</p>
                    @if (processorDescriptor.UniversalApiInfos != null
                      && processorDescriptor.UniversalApiInfos.Any())
                    {
                        <label>Universal Api Service:</label>
                        <ul>
                            @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.ServiceApiInfo != null))
                            {
                                <li>@(apiInfo?.ServiceApiInfo?.Name ?? "")</li>
                            }
                        </ul>
                        <label>Universal Api Property:</label>
                        <ul>
                            @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.PropertyApiInfo != null))
                            {
                                <li>@(apiInfo?.PropertyApiInfo?.Name ?? "")</li>
                            }
                        </ul>
                        <label>Universal Api Event:</label>
                        <ul>
                            @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.EventApiInfo != null))
                            {
                                <li>@(apiInfo.EventApiInfo.EventName ?? "")</li>
                            }
                        </ul>
                    }
                }
                else
                {

                    <p>Device Processor Name: <b>@processorDescriptor.Processor.MetaConfigName</b> <i>of type: @processorDescriptor.Processor.GetType().FullName</i></p>
                    <p>tags: @(processorCompoundInfo.Item2?.Tags?.Aggregate((acc,n)=>acc+", "+n)??"")</p>
                    <ul>
                        <li>Handler <i>of type: @processorDescriptor.DeviceHandlerOrApp.GetType().FullName</i></li>
                        @if (processorDescriptor.UniversalApiInfos != null
                  && processorDescriptor.UniversalApiInfos.Any())
                        {
                            <label>Universal Api Service:</label>
                            <ul>
                                @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.ServiceApiInfo != null))
                                {
                                    <li>@(apiInfo?.ServiceApiInfo?.Name ?? "")</li>
                                }
                            </ul>
                            <label>Universal Api Property:</label>
                            <ul>
                                @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.PropertyApiInfo != null))
                                {
                                    <li>@(apiInfo?.PropertyApiInfo?.Name ?? "")</li>
                                }
                            </ul>
                            <label>Universal Api Event:</label>
                            <ul>
                                @foreach (var apiInfo in processorDescriptor.UniversalApiInfos.Where(a => a.EventApiInfo != null))
                                {
                                    <li>@(apiInfo.EventApiInfo.EventName ?? "")</li>
                                }
                            </ul>
                        }
                        <li>Communicator <i>of type:@(processorDescriptor.DeviceProcessorCommunicator?.GetType().FullName ?? "")</i></li>
                    </ul>
                }
            </li>
        </ul>
    }
</div>