
using System.Text;
using System;
using System.ComponentModel;
namespace OpenCVStudio_v0
{
    public sealed class FlipBlockProperties
    {
        private readonly ProjectManager projectManager; private readonly ProjectBlock projectBlock;
        private ImageFlipMode mode;
        public FlipBlockProperties(ProjectManager projectManager, ProjectBlock projectBlock)
        {
            this.projectManager = projectManager ?? throw new ArgumentNullException(nameof(projectManager));
            this.projectBlock = projectBlock ?? throw new ArgumentNullException(nameof(projectBlock));
            mode = projectManager.GetBlockParameter(projectBlock.Id, "Mode", ImageFlipMode.Horizontal);
        }
        [Category("Отражение")]
        [DisplayName("Направление")]
        [Description("Horizontal — отражение слева направо. Vertical — отражение сверху вниз. Both — отражение по обеим осям.")]
        public ImageFlipMode Mode
        {
            get => mode;
            set
            {
                if (!Enum.IsDefined(value)) throw new ArgumentOutOfRangeException(nameof(value), value, "Неизвестное направление отражения.");
                if (mode == value) return;
                mode = value;
                projectManager.SetBlockParameter(projectBlock.Id, "Mode", value);
            }
        }
        [Category("Блок")]
        [DisplayName("Название")]
        [Description("Название блока в конвейере обработки.")]
        [ReadOnly(true)]
        public string BlockName => projectBlock.Name;
        [Category("Блок")]
        [DisplayName("Тип")]
        [Description("Внутренний идентификатор типа блока.")]
        [ReadOnly(true)]
        public string BlockType => projectBlock.BlockType;
        [Category("Блок")]
        [DisplayName("Позиция")]
        [Description("Позиция блока в конвейере обработки.")]
        [ReadOnly(true)]
        public int Position => projectBlock.Order + 1;
    }
}