using System;
using System.Collections.Generic;
using System.Text;


using OpenCvSharp;
namespace OpenCVStudio_v0
{
    public sealed class InvertExecutor : IImageBlockExecutor
    {
        public string BlockType => "Invert";
        public Mat Execute(Mat input, ProjectBlock block, ProjectManager projectManager)
        {
            ArgumentNullException.ThrowIfNull(input);
            ArgumentNullException.ThrowIfNull(block);
            ArgumentNullException.ThrowIfNull(projectManager);
            if (input.Empty()) throw new ArgumentException("В блок инверсии передано пустое изображение.", nameof(input));
            Mat output = new Mat();
            try
            {
                Cv2.BitwiseNot(input, output);
                if (output.Empty()) throw new InvalidOperationException("Блок инверсии вернул пустое изображение.");
                return output;
            }
            catch { output.Dispose(); throw; }
        }
    }
}