using System.Text;
using ImageMagick;
using Kynareth.Models;
using Microsoft.AspNetCore.Mvc;

namespace Kynareth.Managers;

public static partial class ImageManager
{
	public static void Configure(IConfiguration configuration, IWebHostEnvironment appEnvironment)
	{
		ConfigureGeneration(configuration, appEnvironment);
		ConfigureManipulation(configuration, appEnvironment);
	}
	
	private static ObjectResult GetResult(int statusCode, object data)
		=> new(data) { StatusCode = statusCode };

	public static MagickImage WriteText(this MagickImage image, string text, PositionRect rect, MagickColor fontColor, Encoding encoding, double fontSize, string font = "Impact")
	{
		using var label = new MagickImage($"caption:{text}", new MagickReadSettings()
		{
			Width = rect.Width,
			Height = rect.Height,
			BackgroundColor = MagickColors.Transparent,
			FillColor = fontColor,
			TextGravity = Gravity.Center,
			FontPointsize = fontSize,
			Font = font,
			TextEncoding = encoding,
			StrokeColor = MagickColors.Black,
			StrokeWidth = 2
		});

		image.Composite(label, rect.X, rect.Y, CompositeOperator.Over);
		
		return image;
	}
	
	public static MagickImage WriteText(this MagickImage image, string text, PositionRect rect, MagickColor fontColor, Encoding encoding, string font = "Impact")
	{
		using var label = new MagickImage($"label:{text}", new MagickReadSettings()
		{
			Width = rect.Width,
			Height = rect.Height,
			BackgroundColor = MagickColors.Transparent,
			FillColor = fontColor,
			TextGravity = Gravity.Center,
			Font = font,
			TextEncoding = encoding,
			StrokeColor = MagickColors.Black,
			StrokeWidth = 2
		});

		image.Composite(label, rect.X, rect.Y, CompositeOperator.Over);
		
		return image;
	}
}