using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BaseDomain.Results
{
    public class Error
    {
        public enum ErrorTypeEnum
        {
            None = 0, //Erro vazio (para result)
            Failure = 1, //Quando for uma falha que eu queira retornar no lugar de uma Exception 
            Validation = 2, //Quando for um problema de validação
            Others = 3 //Inesperado ou sem categoria
        }

        public Error(ErrorTypeEnum error, string message, string description="")
        {
            ErrorType = error;
            Message = message;
        }

        public static Error None => new Error(ErrorTypeEnum.None, string.Empty, string.Empty);

        public ErrorTypeEnum ErrorType { get; }
        public string Message { get; }
        public string Description { get; }

        public static implicit operator string(Error error) => error.Message;

        //Permitir atribuir um error diretamente ao resultado.
        public static implicit operator Result(Error error) => Result.Failure(error);
    }
}
