//------------------------------------------------------------------------------
//  此代码版权声明为全文件覆盖，如有原作者特别声明，会在下方手动补充
//  此代码版权（除特别声明外的代码）归作者本人Diego所有
//  源代码使用协议遵循本仓库的开源协议及附加协议
//  Gitee源代码仓库：https://gitee.com/diego2098/ThingsGateway
//  Github源代码仓库：https://github.com/kimdiego2098/ThingsGateway
//  使用文档：https://thingsgateway.cn/
//  QQ群：605534569
//------------------------------------------------------------------------------

namespace ThingsGateway.Gateway.Razor
{
    internal static class ChannelDeviceHelpers
    {
        internal static Channel GetChannelModel(ItemChangedType itemChangedType, ChannelDeviceTreeItem channelDeviceTreeItem)
        {
            Channel oneModel = null;
            if (channelDeviceTreeItem.TryGetChannelRuntime(out var channelRuntime))
            {
                oneModel = channelRuntime.AdaptChannel();
                if (itemChangedType == ItemChangedType.Add)
                {
                    oneModel.Id = 0;
                    oneModel.Name = $"{oneModel.Name}-Copy";
                }
            }
            else if (channelDeviceTreeItem.TryGetDeviceRuntime(out var deviceRuntime))
            {
                oneModel = deviceRuntime.ChannelRuntime?.AdaptChannel() ?? new();
                if (itemChangedType == ItemChangedType.Add)
                {
                    oneModel.Id = 0;
                    oneModel.Name = $"{oneModel.Name}-Copy";
                }
            }
            else if (channelDeviceTreeItem.TryGetPluginName(out var pluginName))
            {
                oneModel = new();
                oneModel.PluginName = pluginName;
            }
            else if (channelDeviceTreeItem.TryGetPluginType(out var pluginType))
            {
                oneModel = new();
            }
            return oneModel;
        }
        internal static Device GetDeviceModel(ItemChangedType itemChangedType, ChannelDeviceTreeItem channelDeviceTreeItem)
        {
            Device oneModel = null;
            if (channelDeviceTreeItem.TryGetDeviceRuntime(out var deviceRuntime))
            {
                oneModel = deviceRuntime.AdaptDevice();
                if (itemChangedType == ItemChangedType.Add)
                {
                    oneModel.Id = 0;
                    oneModel.Name = $"{oneModel.Name}-Copy";
                }
            }
            else if (channelDeviceTreeItem.TryGetChannelRuntime(out var channelRuntime))
            {
                oneModel = new();
                oneModel.Id = 0;
                oneModel.ChannelId = channelRuntime.Id;
            }
            else
            {
                oneModel = new();
                oneModel.Id = 0;
            }
            return oneModel;
        }

        internal static PluginTypeEnum? GetPluginType(ChannelDeviceTreeItem channelDeviceTreeItem)
        {
            PluginTypeEnum? pluginTypeEnum = null;
            if (channelDeviceTreeItem.TryGetPluginType(out var pluginType))
            {
                pluginTypeEnum = pluginType;
            }
            return pluginTypeEnum;
        }


    }
}