// using BMA.EHR.Core;
using BMA.EHR.Recurit.Exam.Service.Response;
using BMA.EHR.Recurit.Exam.Service.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Net;

namespace BMA.EHR.Recurit.Exam.Service.Controllers
{
    public class BaseController : ControllerBase
    {
        #region  " Methods "

        #region " Protected "

        #region " IActionResult "

        protected virtual ActionResult<ResponseObject> Success(string message, object? result = null)
        {
            if (result != null)
            {
                return Ok(new ResponseObject
                {
                    Status = StatusCodes.Status200OK,
                    Message = message,
                    Result = result
                });
            }
            else
            {
                return Ok(new ResponseObject
                {
                    Status = StatusCodes.Status200OK,
                    Message = message
                });
            }

        }

        protected virtual ActionResult<ResponseObject> Success(object? result = null)
        {
            return Success("สำเร็จ", result);
        }

        protected virtual ActionResult<ResponseObject> Error(string message, string result, int statusCode = StatusCodes.Status500InternalServerError)
        {
            return StatusCode((int)statusCode, new ResponseObject
            {
                Status = statusCode,
                Message = message,
                Result = result
            });
        }


        protected virtual ActionResult<ResponseObject> Error(string message, int statusCode = StatusCodes.Status500InternalServerError)
        {
            return StatusCode((int)statusCode, new ResponseObject
            {
                Status = statusCode,
                Message = message
            });
        }

        protected virtual ActionResult<ResponseObject> Error(Exception exception, string message, int statusCode = StatusCodes.Status500InternalServerError)
        {
            var msg = exception.Message;
            var inner = exception.InnerException;
            while (inner != null)
            {
                msg += $" {inner.Message}\r\n";
                inner = inner.InnerException;
            }

            return Error(message, msg, statusCode);
        }

        protected virtual ActionResult<ResponseObject> Error(Exception exception, int statusCode = StatusCodes.Status500InternalServerError)
        {
            var msg = exception.Message;
            var inner = exception.InnerException;
            while (inner != null)
            {
                msg += $" {inner.Message}\r\n";
                inner = inner.InnerException;
            }

            return Error(msg, statusCode);
        }

        #endregion

        #endregion

        #endregion
    }
}
