using System;

namespace Seenginx.Models
{
	public class Result<D>
	{
		public bool AllOk { get; private set; } = true;
		public string ErrorMessage { get; private set; }
		public Exception Exception { get; private set; } = null;
		public D Data { get; private set; }

		public Result() { }
		public Result(D data)
		{
			Data = data;
		}

		public Result<D> Invalidate(string errorMessage, Exception exception = null)
		{
			AllOk = false;
			ErrorMessage = errorMessage;
			if (exception != null)
				Exception = exception;

			return this;
		}

		public void SetData(D data) => Data = data;
	}

	public class Result
	{
		public bool AllOk { get; private set; } = true;
		public string ErrorMessage { get; private set; }
		public Exception Exception { get; private set; } = null;

		public Result Invalidate(string errorMessage, Exception exception = null)
		{
			AllOk = false;
			ErrorMessage = errorMessage;
			if (exception != null)
				Exception = exception;

			return this;
		}
	}
}
