using Lada.Framework.DTO.SmartTable;
using Lada.Framework.Infrastructures.Helpers;
using Ladaer.BackEnd.Infrastructures.DTO.Models.OrderBusiness;
using Ladaer.BackEnd.Infrastructures.Services.OrderBusiness;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Ladaer.BackEnd.Controllers.OrderBusiness
{
    /// <summary>
    /// Controller quản lý lý do thất bại lấy/giao hàng (Admin)
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    [Authorize]
    public class OrderFailReasonController : ControllerBase
    {
        private readonly IOrderFailReasonService _service;

        public OrderFailReasonController(IOrderFailReasonService service)
        {
            _service = service;
        }

        /// <summary>
        /// Tìm kiếm lý do thất bại
        /// </summary>
        [HttpPost("Search")]
        [Authorize(Roles = "OrderFailReason.Search")]
        public async Task<IActionResult> Search([FromBody] SmartTableParam param)
        {
            var result = await _service.Search(param);
            return Ok(result);
        }

        /// <summary>
        /// Lấy thông tin lý do thất bại theo ID
        /// </summary>
        [HttpGet("GetById/{id}")]
        [Authorize(Roles = "OrderFailReason.GetById")]
        public async Task<IActionResult> GetById(int id)
        {
            var result = await _service.GetById(id);
            if (result == null)
            {
                return BadRequest("Không tìm thấy bản ghi");
            }
            return Ok(result);
        }

        /// <summary>
        /// Tạo mới hoặc cập nhật lý do thất bại
        /// </summary>
        [HttpPost("CreateOrUpdate")]
        [Authorize(Roles = "OrderFailReason.CreateOrUpdate")]
        public async Task<IActionResult> CreateOrUpdate([FromBody] OrderFailReasonModel model)
        {
            var currentUser = User.GetCurrentUser();
            if (currentUser == null)
            {
                return BadRequest("Không có người dùng");
            }
            if (currentUser.UserId <= 0)
            {
                return BadRequest("Không xác định được người dùng");
            }

            model.UpdatedBy = currentUser.UserId;
            model.UpdatedByUserName = currentUser.UserName;

            var result = await _service.CreateOrUpdate(model);
            return Ok(result);
        }

        /// <summary>
        /// Xóa lý do thất bại (soft delete)
        /// </summary>
        [HttpPost("Delete")]
        [Authorize(Roles = "OrderFailReason.Delete")]
        public async Task<IActionResult> Delete([FromBody] OrderFailReasonModel model)
        {
            var currentUser = User.GetCurrentUser();
            if (currentUser == null)
            {
                return BadRequest("Không có người dùng");
            }
            if (currentUser.UserId <= 0)
            {
                return BadRequest("Không xác định được người dùng");
            }

            model.UpdatedBy = currentUser.UserId;
            model.UpdatedByUserName = currentUser.UserName;

            var result = await _service.Delete(model);
            return Ok(result);
        }
    }
}
