using System;

namespace OpenCVStudio_v0
{
    /// <summary>
    /// Свойства блока ChannelSelector.
    /// Выбор цветовых каналов из двух изображений.
    /// </summary>
    public sealed class ChannelSelectorBlockProperties
    {
        private readonly ProjectManager projectManager;
        private readonly ProjectBlock projectBlock;

        public ChannelSelectorBlockProperties(ProjectManager projectManager, ProjectBlock projectBlock)
        {
            this.projectManager = projectManager ?? throw new ArgumentNullException(nameof(projectManager));
            this.projectBlock = projectBlock ?? throw new ArgumentNullException(nameof(projectBlock));
        }

        public string FunctionName => "Cv2.Split";

        public string Description => "Извлекает выбранные цветовые каналы из двух изображений и передает их в два выходных слота pipeline.";

        public string InputDescription => "Вход 1: основное изображение.\r\nВход 2: второе изображение через SecondImageSource.";

        public string OutputDescription => "Выход 1: выбранный канал в основном слоте.\r\nВыход 2: выбранный канал во втором слоте.";

        public string Requirements => "Для выбора каналов изображение должно быть трехканальным BGR.";

        public string Parameters => "FirstChannel, SecondChannel";

        public ChannelSelectionMode FirstChannel
        {
            get => projectManager.GetBlockParameter(projectBlock.Id, "FirstChannel", ChannelSelectionMode.Original);
            set => projectManager.SetBlockParameter(projectBlock.Id, "FirstChannel", value);
        }

        public ChannelSelectionMode SecondChannel
        {
            get => projectManager.GetBlockParameter(projectBlock.Id, "SecondChannel", ChannelSelectionMode.Original);
            set => projectManager.SetBlockParameter(projectBlock.Id, "SecondChannel", value);
        }

        public string FirstChannelDescription => "Канал первого изображения: Original, Blue, Green, Red.";

        public string SecondChannelDescription => "Канал второго изображения: Original, Blue, Green, Red.";

        public string MissingSecondImageBehavior => "Если второе изображение отсутствует, используется основное изображение.";

        public string InputCount => "2 изображения → 2 изображения";
    }
}