using _SCscHero.Base;
using _SCscHero.Base.Enum;
using _SCscHero.Base.Help;
using _SCscHero.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _SCscHero.Base.Extensions
{
/// <summary>
/// 验证Model扩展
/// </summary>
public static class InvalidModelStateExtensions
{
private static InvalidModelReturnMessageTypeEnum InvalidModelReturnMessageTypeEnumValue = (InvalidModelReturnMessageTypeEnum)Enum.Parse(typeof(InvalidModelReturnMessageTypeEnum), AppSettingHelper.GetConfig("Extensions:InvalidModelReturnMessageType"));

#region Model验证
/// <summary>
/// Model验证
/// </summary>
/// <param name="services"></param>
public static void InvalidModelState(this IServiceCollection services)
{
//模型绑定特性验证,自定义返回格式
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = actionContext =>
{
//获取验证失败的模型字段
var errorList = actionContext.ModelState
.Select(e => e.Value.Errors?.FirstOrDefault()?.ErrorMessage)
.ToList();
//设置返回内容
var result = new ResultModel();
result.Code = UnifyAPI.CodeConstant.FAIL;
result.Message = FormatMessage(errorList);
var objectResult = new BadRequestObjectResult(result);
objectResult.StatusCode = (int?)StatusCodes.Status200OK;
return objectResult;
};
});
}

#endregion

#region 格式化消息
/// <summary>
/// 格式化消息
/// </summary>
/// <returns></returns>
private static string FormatMessage(List<string> messageList)
{
StringBuilder message = new StringBuilder();

switch (InvalidModelReturnMessageTypeEnumValue)
{
case InvalidModelReturnMessageTypeEnum.Single:
{
message.Append(messageList.First());
}
break;
default:
{
message.Append(string.Join("|", messageList));
}
break;
}
return message.ToString();
}
#endregion
}
}